Prevent spurious RX timeout/close on incoming socket object

When accepting a socket from an incoming connection, the internal fd was
assigned without updating the field for last RX activity. If the remote
side did *not* immediately write to the connection, or otherwise the
socket could not be internally checked for incoming data, AND the
higher-level code set up a RX timeout value, the 125-ms interval polling
might evaluate the socket RX timeout condition with a last RX activity
timestamp of zero (as per the default constructor). This caused a
spurious RX timeout and incorrect socket closing. Fixed by initializing
the field when the new incoming connection socket is accepted.
This commit is contained in:
Alex Villacís Lasso
2022-09-02 17:52:50 -05:00
parent f828ec1379
commit d4c9bcdd37

View File

@@ -307,6 +307,7 @@ AsyncClient::AsyncClient(int sockfd)
xSemaphoreTakeRecursive(_asyncsock_mutex, (TickType_t)portMAX_DELAY);
_conn_state = 4;
_socket = sockfd;
_rx_last_packet = millis();
xSemaphoreGiveRecursive(_asyncsock_mutex);
}
}