• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь как правильно закрывать соедиенние с клиентом?

Atom

Member
Пытаюсь сделать обработку запросов от клинетов по определенному порту

Код:
    if (mqttTCPServer->hasClient()) {

      if (!mqttClient || !mqttClient.connected()) {

        if (mqttClient) {

          mqttClient.stop();
          Serial.printf(c_s_ClientStop, c_mqtt_client);
        }
        mqttClient = mqttTCPServer->available();
        Serial.printf(c_s_ClientNew, c_mqtt_client);
        mqttClient.flush();  // clear input buffer, else you get strange characters
      }
    }
    delay(0);
    packet_mqtt_size = 0;
    while (mqttClient.available()) { // get data from Client

      packet_mqtt_size = mqttClient.read((uint8_t*)packet_mqtt_buffer, _MQTT_BUFF_MAX_SIZE - 1);
//      Serial.printf("Size:%d\r\n", packet_mqtt_size);
      packet_mqtt_buffer[packet_mqtt_size] = 0;
      //Serial.printf(c_s_ClientStop, c_mqtt_client);
//      Serial.println(packet_mqtt_buffer);
      if ((packet_mqtt_size > 0)) {
       
        if (parseBuff()){
       

            delay(0);
          mqtt_execute2(sec_valid_cnt);
            Serial.println("out exec");
            delay(0);
        }
          
      }
      delay(0);
      mqttClient.write((char*)packet_mqtt_buffer, packet_mqtt_size);
      mqttClient.stop();
      delay(0);
    }
Для теста использую netcat. при первом обращении происходит все правильно : сервер выдает ответ и разрывает соединение. При повторном обращении (даже не изменив ни байта в строке). Происходит разрыв соединения без вывода ответа. При третьем соединении просто виснет.


Мои подозрения на то, что я не правильно делаю разрыв соединения клиента и что то где то подвисает. Кто нибудь может что либо прокомментировать?
 
Сверху Снизу