summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-05-28 17:43:00 +1000
committerDamien George <damien.p.george@gmail.com>2019-05-28 17:43:00 +1000
commit883e987b90e82f0a9ab223910890da2c5d50b9d3 (patch)
treec8ee0a4094b497e41daef1809874a03074806748
parent8c9758ff2ee5c5b70e4eab5fe0396de2e21299b0 (diff)
esp32/modsocket: Raise EAGAIN when accept fails in non-blocking mode.
EAGAIN should be for pure non-blocking mode and ETIMEDOUT for when there is a finite (but non-zero) timeout enabled.
-rw-r--r--ports/esp32/modsocket.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/ports/esp32/modsocket.c b/ports/esp32/modsocket.c
index 1d7aec5ef..8b80e631d 100644
--- a/ports/esp32/modsocket.c
+++ b/ports/esp32/modsocket.c
@@ -253,7 +253,13 @@ STATIC mp_obj_t socket_accept(const mp_obj_t arg0) {
if (errno != EAGAIN) exception_from_errno(errno);
check_for_exceptions();
}
- if (new_fd < 0) mp_raise_OSError(MP_ETIMEDOUT);
+ if (new_fd < 0) {
+ if (self->retries == 0) {
+ mp_raise_OSError(MP_EAGAIN);
+ } else {
+ mp_raise_OSError(MP_ETIMEDOUT);
+ }
+ }
// create new socket object
socket_obj_t *sock = m_new_obj_with_finaliser(socket_obj_t);