@@ -706,8 +706,6 @@ bool socketpool_socket(socketpool_socketpool_obj_t *self,
706706 case MOD_NETWORK_SOCK_STREAM : {
707707 // Register the socket object as our callback argument.
708708 tcp_arg (socket -> pcb .tcp , (void * )socket );
709- // Register our error callback.
710- tcp_err (socket -> pcb .tcp , _lwip_tcp_error );
711709 break ;
712710 }
713711 case MOD_NETWORK_SOCK_DGRAM : {
@@ -916,10 +914,11 @@ void socketpool_socket_close(socketpool_socket_obj_t *socket) {
916914 case SOCKETPOOL_SOCK_STREAM : {
917915 // Deregister callback (pcb.tcp is set to NULL below so must deregister now)
918916 tcp_arg (socket -> pcb .tcp , NULL );
919- tcp_err (socket -> pcb .tcp , NULL );
920- tcp_recv (socket -> pcb .tcp , NULL );
921917
922918 if (socket -> pcb .tcp -> state != LISTEN ) {
919+ tcp_err (socket -> pcb .tcp , NULL );
920+ tcp_recv (socket -> pcb .tcp , NULL );
921+
923922 // Schedule a callback to abort the connection if it's not cleanly closed after
924923 // the given timeout. The callback must be set before calling tcp_close since
925924 // 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,
977976 // Register our receive callback.
978977 MICROPY_PY_LWIP_ENTER
979978 tcp_recv (socket -> pcb .tcp , _lwip_tcp_recv );
979+ tcp_err (socket -> pcb .tcp , _lwip_tcp_error );
980980 socket -> state = STATE_CONNECTING ;
981981 err = tcp_connect (socket -> pcb .tcp , & dest , port , _lwip_tcp_connected );
982982 if (err != ERR_OK ) {
0 commit comments