Я использую клиентскую библиотеку apollo broker и mosquitto C. После успешного опубликования сообщения я отключу клиента, используя функцию mosquitto_disconnect (mosq). но похоже, что порт, который клиент использовал для связи с брокером, по-прежнему не является бесплатным. Есть ли способ вручную освободить порт, который клиент использовал для связи с брокером в c-программе?Освобождение порта после того, как клиент отключается с mktt broker
void on_publish(struct mosquitto *mosq, void *userdata, int mid)
{
mosquitto_disconnect(mosq);
log_print("mqtt",1,"Inside publish callback");
}
int sendData_mqtt(char *address, char *port, char* url, char *data)
{
struct mosquitto *mosq;
int err;
char *clean_session = "true";
char *retain_flag = "true";
int port1= atoi(port);
mosq = mosquitto_new("unknown", clean_session, NULL);
mosquitto_publish_callback_set(mosq, on_publish);
mosquitto_username_pw_set(mosq,"admin","password");
err=mosquitto_connect(mosq, address,port1,60);
if(err != 0){
log_print("mqtt",1,"connect error= %s\n",mosquitto_strerror(err));
return -1;
}
else
log_print("mqtt",1,"successfully connected");
err = mosquitto_publish(mosq, NULL, "subject", strlen(data), data, 1, retain_flag);
sleep(5);
if(err != 0) {
log_print("mqtt",1,"Publish error = %s\n",mosquitto_strerror(err));
return -1;
}
mosquitto_loop_forever(mosq,-1,1);
return 10;
}
Я использовал mosquitto_loop_forever() и libmosquitto Версия 1.4.2 – prem
Не могли бы вы предоставить пример кода? – ralight
Фактически это тот же код, который вы указали в моем предыдущем вопросе, но в любом случае плохо добавьте код – prem