File tree 1 file changed +12
-2
lines changed 1 file changed +12
-2
lines changed Original file line number Diff line number Diff line change @@ -160,7 +160,12 @@ STATIC mp_obj_t socket_connect(mp_obj_t self_in, mp_obj_t addr_in) {
160
160
mp_buffer_info_t bufinfo ;
161
161
mp_get_buffer_raise (addr_in , & bufinfo , MP_BUFFER_READ );
162
162
int r = connect (self -> fd , (const struct sockaddr * )bufinfo .buf , bufinfo .len );
163
- RAISE_ERRNO (r , errno );
163
+ int err = errno ;
164
+ if (r == -1 && self -> blocking && err == EINPROGRESS ) {
165
+ // EINPROGRESS on a blocking socket means the operation timed out
166
+ err = MP_ETIMEDOUT ;
167
+ }
168
+ RAISE_ERRNO (r , err );
164
169
return mp_const_none ;
165
170
}
166
171
STATIC MP_DEFINE_CONST_FUN_OBJ_2 (socket_connect_obj , socket_connect );
@@ -190,7 +195,12 @@ STATIC mp_obj_t socket_accept(mp_obj_t self_in) {
190
195
byte addr [32 ];
191
196
socklen_t addr_len = sizeof (addr );
192
197
int fd = accept (self -> fd , (struct sockaddr * )& addr , & addr_len );
193
- RAISE_ERRNO (fd , errno );
198
+ int err = errno ;
199
+ if (fd == -1 && self -> blocking && err == EAGAIN ) {
200
+ // EAGAIN on a blocking socket means the operation timed out
201
+ err = MP_ETIMEDOUT ;
202
+ }
203
+ RAISE_ERRNO (fd , err );
194
204
195
205
mp_obj_tuple_t * t = MP_OBJ_TO_PTR (mp_obj_new_tuple (2 , NULL ));
196
206
t -> items [0 ] = MP_OBJ_FROM_PTR (socket_new (fd ));
You can’t perform that action at this time.
0 commit comments