@@ -199,8 +199,12 @@ typedef struct _lwip_socket_obj_t {
199199 uint8_t domain ;
200200 uint8_t type ;
201201
202- // 0 = unconnected, 1 = connecting, 2 = connected, 3 = other side closed
203- int8_t connected ;
202+ #define STATE_NEW 0
203+ #define STATE_CONNECTING 1
204+ #define STATE_CONNECTED 2
205+ #define STATE_PEER_CLOSED 3
206+ // Negative value is lwIP error
207+ int8_t state ;
204208} lwip_socket_obj_t ;
205209
206210static inline void poll_sockets (void ) {
@@ -231,7 +235,7 @@ STATIC void _lwip_tcp_error(void *arg, err_t err) {
231235 lwip_socket_obj_t * socket = (lwip_socket_obj_t * )arg ;
232236
233237 // Pass the error code back via the connection variable.
234- socket -> connected = err ;
238+ socket -> state = err ;
235239 // If we got here, the lwIP stack either has deallocated or will deallocate the pcb.
236240 socket -> pcb .tcp = NULL ;
237241}
@@ -240,7 +244,7 @@ STATIC void _lwip_tcp_error(void *arg, err_t err) {
240244STATIC err_t _lwip_tcp_connected (void * arg , struct tcp_pcb * tpcb , err_t err ) {
241245 lwip_socket_obj_t * socket = (lwip_socket_obj_t * )arg ;
242246
243- socket -> connected = 2 ;
247+ socket -> state = STATE_CONNECTED ;
244248 return ERR_OK ;
245249}
246250
@@ -264,7 +268,7 @@ STATIC err_t _lwip_tcp_recv(void *arg, struct tcp_pcb *tcpb, struct pbuf *p, err
264268
265269 if (p == NULL ) {
266270 // Other side has closed connection.
267- socket -> connected = 3 ;
271+ socket -> state = STATE_PEER_CLOSED ;
268272 return ERR_OK ;
269273 } else if (socket -> incoming .pbuf != NULL ) {
270274 // No room in the inn, let LWIP know it's still responsible for delivery later
@@ -378,7 +382,7 @@ STATIC mp_uint_t lwip_tcp_send(lwip_socket_obj_t *socket, const byte *buf, mp_ui
378382// Helper function for recv/recvfrom to handle TCP packets
379383STATIC mp_uint_t lwip_tcp_receive (lwip_socket_obj_t * socket , byte * buf , mp_uint_t len , int * _errno ) {
380384
381- if (socket -> connected == 3 ) {
385+ if (socket -> state == STATE_PEER_CLOSED ) {
382386 return 0 ;
383387 }
384388
@@ -463,7 +467,7 @@ STATIC mp_obj_t lwip_socket_make_new(mp_obj_t type_in, mp_uint_t n_args,
463467
464468 socket -> incoming .pbuf = NULL ;
465469 socket -> timeout = -1 ;
466- socket -> connected = 0 ;
470+ socket -> state = STATE_NEW ;
467471 socket -> leftover_count = 0 ;
468472 return socket ;
469473}
@@ -489,7 +493,7 @@ STATIC mp_obj_t lwip_socket_close(mp_obj_t self_in) {
489493 //case MOD_NETWORK_SOCK_RAW: raw_remove(socket->pcb.raw); break;
490494 }
491495 socket -> pcb .tcp = NULL ;
492- socket -> connected = -16 ; // EBADF
496+ socket -> state = -16 ; // EBADF
493497 if (socket -> incoming .pbuf != NULL ) {
494498 if (!socket_is_listener ) {
495499 pbuf_free (socket -> incoming .pbuf );
@@ -599,7 +603,7 @@ STATIC mp_obj_t lwip_socket_accept(mp_obj_t self_in) {
599603 socket2 -> type = MOD_NETWORK_SOCK_STREAM ;
600604 socket2 -> incoming .pbuf = NULL ;
601605 socket2 -> timeout = socket -> timeout ;
602- socket2 -> connected = 2 ;
606+ socket2 -> state = STATE_CONNECTED ;
603607 socket2 -> leftover_count = 0 ;
604608 tcp_arg (socket2 -> pcb .tcp , (void * )socket2 );
605609 tcp_err (socket2 -> pcb .tcp , _lwip_tcp_error );
@@ -636,20 +640,19 @@ STATIC mp_obj_t lwip_socket_connect(mp_obj_t self_in, mp_obj_t addr_in) {
636640 err_t err = ERR_ARG ;
637641 switch (socket -> type ) {
638642 case MOD_NETWORK_SOCK_STREAM : {
639- if (socket -> connected != 0 ) {
640- if (socket -> connected == 2 ) {
643+ if (socket -> state != STATE_NEW ) {
644+ if (socket -> state == STATE_CONNECTED ) {
641645 nlr_raise (mp_obj_new_exception_arg1 (& mp_type_OSError , MP_OBJ_NEW_SMALL_INT (EALREADY )));
642646 } else {
643647 nlr_raise (mp_obj_new_exception_arg1 (& mp_type_OSError , MP_OBJ_NEW_SMALL_INT (EINPROGRESS )));
644648 }
645649 }
646650 // Register our recieve callback.
647651 tcp_recv (socket -> pcb .tcp , _lwip_tcp_recv );
648- // Mark us as "connecting"
649- socket -> connected = 1 ;
652+ socket -> state = STATE_CONNECTING ;
650653 err = tcp_connect (socket -> pcb .tcp , & dest , port , _lwip_tcp_connected );
651654 if (err != ERR_OK ) {
652- socket -> connected = 0 ;
655+ socket -> state = STATE_NEW ;
653656 nlr_raise (mp_obj_new_exception_arg1 (& mp_type_OSError , MP_OBJ_NEW_SMALL_INT (error_lookup_table [- err ])));
654657 }
655658 socket -> peer_port = (mp_uint_t )port ;
@@ -658,20 +661,20 @@ STATIC mp_obj_t lwip_socket_connect(mp_obj_t self_in, mp_obj_t addr_in) {
658661 if (socket -> timeout != -1 ) {
659662 for (mp_uint_t retries = socket -> timeout / 100 ; retries -- ;) {
660663 mp_hal_delay_ms (100 );
661- if (socket -> connected != 1 ) break ;
664+ if (socket -> state != STATE_CONNECTING ) break ;
662665 }
663- if (socket -> connected == 1 ) {
666+ if (socket -> state == STATE_CONNECTING ) {
664667 nlr_raise (mp_obj_new_exception_arg1 (& mp_type_OSError , MP_OBJ_NEW_SMALL_INT (ETIMEDOUT )));
665668 }
666669 } else {
667- while (socket -> connected == 1 ) {
670+ while (socket -> state == STATE_CONNECTING ) {
668671 mp_hal_delay_ms (100 );
669672 }
670673 }
671- if (socket -> connected == 2 ) {
674+ if (socket -> state == STATE_CONNECTED ) {
672675 err = ERR_OK ;
673676 } else {
674- err = socket -> connected ;
677+ err = socket -> state ;
675678 }
676679 break ;
677680 }
@@ -695,8 +698,8 @@ STATIC mp_obj_t lwip_socket_send(mp_obj_t self_in, mp_obj_t buf_in) {
695698
696699 if (socket -> pcb .tcp == NULL ) {
697700 // not connected
698- _errno = error_lookup_table [- (socket -> connected )];
699- socket -> connected = -16 ;
701+ _errno = error_lookup_table [- (socket -> state )];
702+ socket -> state = -16 ;
700703 nlr_raise (mp_obj_new_exception_arg1 (& mp_type_OSError , MP_OBJ_NEW_SMALL_INT (_errno )));
701704 }
702705
@@ -728,8 +731,8 @@ STATIC mp_obj_t lwip_socket_recv(mp_obj_t self_in, mp_obj_t len_in) {
728731
729732 if (socket -> pcb .tcp == NULL ) {
730733 // not connected
731- _errno = error_lookup_table [- (socket -> connected )];
732- socket -> connected = -16 ;
734+ _errno = error_lookup_table [- (socket -> state )];
735+ socket -> state = -16 ;
733736 nlr_raise (mp_obj_new_exception_arg1 (& mp_type_OSError , MP_OBJ_NEW_SMALL_INT (_errno )));
734737 }
735738
@@ -766,8 +769,8 @@ STATIC mp_obj_t lwip_socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t
766769
767770 if (socket -> pcb .tcp == NULL ) {
768771 // not connected
769- _errno = error_lookup_table [- (socket -> connected )];
770- socket -> connected = -16 ;
772+ _errno = error_lookup_table [- (socket -> state )];
773+ socket -> state = -16 ;
771774 nlr_raise (mp_obj_new_exception_arg1 (& mp_type_OSError , MP_OBJ_NEW_SMALL_INT (_errno )));
772775 }
773776
@@ -802,8 +805,8 @@ STATIC mp_obj_t lwip_socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in) {
802805
803806 if (socket -> pcb .tcp == NULL ) {
804807 // not connected
805- _errno = error_lookup_table [- (socket -> connected )];
806- socket -> connected = -16 ;
808+ _errno = error_lookup_table [- (socket -> state )];
809+ socket -> state = -16 ;
807810 nlr_raise (mp_obj_new_exception_arg1 (& mp_type_OSError , MP_OBJ_NEW_SMALL_INT (_errno )));
808811 }
809812
0 commit comments