From 5da8de2b66d3f43107e1e745afa9bb6a4bf601eb Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Sun, 4 Jun 2017 12:30:41 +0300 Subject: [PATCH] extmod/modlwip: Fix error codes for duplicate calls to connect(). If socket is already connected, POSIX requires returning EISCONN. If connection was requested, but not yet complete (for non-blocking socket), error code is EALREADY. http://pubs.opengroup.org/onlinepubs/7908799/xns/connect.html --- extmod/modlwip.c | 4 ++-- py/mperrno.h | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/extmod/modlwip.c b/extmod/modlwip.c index aa93eaa276..d243985ad0 100644 --- a/extmod/modlwip.c +++ b/extmod/modlwip.c @@ -800,9 +800,9 @@ STATIC mp_obj_t lwip_socket_connect(mp_obj_t self_in, mp_obj_t addr_in) { case MOD_NETWORK_SOCK_STREAM: { if (socket->state != STATE_NEW) { if (socket->state == STATE_CONNECTED) { - mp_raise_OSError(MP_EALREADY); + mp_raise_OSError(MP_EISCONN); } else { - mp_raise_OSError(MP_EINPROGRESS); + mp_raise_OSError(MP_EALREADY); } } // Register our receive callback. diff --git a/py/mperrno.h b/py/mperrno.h index 4d092de452..6ea99ae227 100644 --- a/py/mperrno.h +++ b/py/mperrno.h @@ -73,6 +73,7 @@ #define MP_ECONNABORTED (103) // Software caused connection abort #define MP_ECONNRESET (104) // Connection reset by peer #define MP_ENOBUFS (105) // No buffer space available +#define MP_EISCONN (106) // Transport endpoint is already connected #define MP_ENOTCONN (107) // Transport endpoint is not connected #define MP_ETIMEDOUT (110) // Connection timed out #define MP_ECONNREFUSED (111) // Connection refused @@ -127,6 +128,7 @@ #define MP_ECONNABORTED ECONNABORTED #define MP_ECONNRESET ECONNRESET #define MP_ENOBUFS ENOBUFS +#define MP_EISCONN EISCONN #define MP_ENOTCONN ENOTCONN #define MP_ETIMEDOUT ETIMEDOUT #define MP_ECONNREFUSED ECONNREFUSED