Я отправлял пакеты через TCP-сокет постоянно. Затем я отключил сетевой кабель и обнаружил, что send () все еще возвращает успех. Почему? Коды инициации:
// This function must be called before any other functions called.
/* Return:
0: success
1: init socket fail
2: send fail
3: connect fail
*/
int mtMqttInit (const char *id, const char *username, const char *password, const char *hostName, const int tcpPort, unsigned int timeoutSec)
{
int pktLen;
mqtt_init(&mtBroker, id);
mqtt_init_auth(&mtBroker, username, password);
if (init_socket(&mtBroker, hostName, tcpPort)) {
if (debug)
printf ("init_socket()\n");
return MT_MQTT_INIT_SOCKET_FAIL;
}
if (mqtt_connect(&mtBroker) == -1) {
if (debug)
printf ("mqtt_connect()\n");
return MT_MQTT_INIT_CONNECT_FAIL;
}
.....
}
void mqtt_init(mqtt_broker_handle_t* broker, const char* clientid) {
// Connection options
broker->alive = 300; // 300 seconds = 5 minutes
broker->seq = 1; // Sequency for message indetifiers
// Client options
// .....
// Will topic
broker->clean_session = 1;
}
Фрагмент кода отправки:
// Send the packet
log_status("to send");
if(broker->send(broker->socket_info, packet, sizeof(packet)) <
sizeof(packet)) {
log_error("send() failed");
return -1;
}
log_status("send() done");
Даже в случае разрыва кабельного соединения я не вижу показанное сообщение «send () faied» , То есть я не могу определить, действителен ли сокет или нет. Что с ним не так?