Merge pull request #7813 from gneverov/issue_7790

don't set tcp_err callback for listen sockets (fixes #7790)
This commit is contained in:
Dan Halbert 2023-03-29 17:14:42 -04:00 committed by GitHub
commit b863fba992
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -706,8 +706,6 @@ bool socketpool_socket(socketpool_socketpool_obj_t *self,
case MOD_NETWORK_SOCK_STREAM: {
// Register the socket object as our callback argument.
tcp_arg(socket->pcb.tcp, (void *)socket);
// Register our error callback.
tcp_err(socket->pcb.tcp, _lwip_tcp_error);
break;
}
case MOD_NETWORK_SOCK_DGRAM: {
@ -916,10 +914,11 @@ void socketpool_socket_close(socketpool_socket_obj_t *socket) {
case SOCKETPOOL_SOCK_STREAM: {
// Deregister callback (pcb.tcp is set to NULL below so must deregister now)
tcp_arg(socket->pcb.tcp, NULL);
tcp_err(socket->pcb.tcp, NULL);
tcp_recv(socket->pcb.tcp, NULL);
if (socket->pcb.tcp->state != LISTEN) {
tcp_err(socket->pcb.tcp, NULL);
tcp_recv(socket->pcb.tcp, NULL);
// Schedule a callback to abort the connection if it's not cleanly closed after
// the given timeout. The callback must be set before calling tcp_close since
// the latter may free the pcb; if it doesn't then the callback will be active.
@ -977,6 +976,7 @@ void common_hal_socketpool_socket_connect(socketpool_socket_obj_t *socket,
// Register our receive callback.
MICROPY_PY_LWIP_ENTER
tcp_recv(socket->pcb.tcp, _lwip_tcp_recv);
tcp_err(socket->pcb.tcp, _lwip_tcp_error);
socket->state = STATE_CONNECTING;
err = tcp_connect(socket->pcb.tcp, &dest, port, _lwip_tcp_connected);
if (err != ERR_OK) {