You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This function allows me to use an arbitrary timeout for establishing a connection. When connection issues generate feedback to the Mosquitto client (e.g., rejected TCP packets), there are no problems, and the mosquitto_connect() function quickly returns a result. However, in situations where there is no feedback to the client (e.g., packets are dropped or disappear for other reasons), mosquitto_connect() can attempt an unsuccessful connection for several minutes.
To avoid modifying the libmosquitto library code, this external function works in conjunction with mosquitto_connect_async() and mosquitto_socket().
After calling the connect function, my function waits for a specified timeout period for the connection to be established. When this happens, the function returns 0. As a result, I achieve functionality that could be directly implemented in the library through a modified mosquitto_connect() function.
If we add an additional timeout argument:
int mosquitto_connect(struct mosquitto *mosq, const char *host, int port, int keepalive, int timeout)
We could implement the logic similar to the one used in my function inside this modified function.
What do you think about this?
static int check_tcp_connection(int fd, int timeout_ms) {
fd_set write_fds;
struct timespec timeout;
int ret;
socklen_t optlen;
int error;
FD_ZERO(&write_fds);
FD_SET(fd, &write_fds);
timeout.tv_sec = timeout_ms / 1000;
timeout.tv_nsec = (timeout_ms % 1000) * 1000000;
ret = pselect(fd + 1, NULL, &write_fds, NULL, &timeout, NULL);
if (ret == -1) {
return MOSQ_ERR_ERRNO; // Error occurred
} else if (ret == 0) {
return MOSQ_ERR_TIMEOUT; // Timeout occurred
} else {
optlen = sizeof(error);
if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &optlen) < 0) {
return MOSQ_ERR_ERRNO; // An error occurred
}
if (error == 0) {
return MOSQ_ERR_SUCCESS; // Connection is established
} else if (error == EINPROGRESS) {
return MOSQ_ERR_CONN_PENDING; // Connection is still in progress
} else {
return MOSQ_ERR_CONN_REFUSED; // Connection failed
}
}
}
The text was updated successfully, but these errors were encountered:
This function allows me to use an arbitrary timeout for establishing a connection. When connection issues generate feedback to the Mosquitto client (e.g., rejected TCP packets), there are no problems, and the mosquitto_connect() function quickly returns a result. However, in situations where there is no feedback to the client (e.g., packets are dropped or disappear for other reasons), mosquitto_connect() can attempt an unsuccessful connection for several minutes.
To avoid modifying the libmosquitto library code, this external function works in conjunction with mosquitto_connect_async() and mosquitto_socket().
After calling the connect function, my function waits for a specified timeout period for the connection to be established. When this happens, the function returns 0. As a result, I achieve functionality that could be directly implemented in the library through a modified mosquitto_connect() function.
If we add an additional timeout argument:
int mosquitto_connect(struct mosquitto *mosq, const char *host, int port, int keepalive, int timeout)
We could implement the logic similar to the one used in my function inside this modified function.
What do you think about this?
The text was updated successfully, but these errors were encountered: