fixed bug #38853 "connect() use a wrong errno": return ERR_ALREADY/EALRADY during connect, ERR_ISCONN/EISCONN when already connected

This commit is contained in:
sg 2015-02-17 22:10:23 +01:00
parent b146ae96a7
commit 604a92dc3d
4 changed files with 24 additions and 15 deletions

View File

@ -186,6 +186,11 @@ HISTORY
++ Bugfixes: ++ Bugfixes:
2015-02-17: Simon Goldschmidt
* err.h, sockets.c, api_msg.c: fixed bug #38853 "connect() use a wrong errno":
return ERR_ALREADY/EALRADY during connect, ERR_ISCONN/EISCONN when already
connected
2015-02-17: Simon Goldschmidt 2015-02-17: Simon Goldschmidt
* tcp_impl.h, tcp_out.c, tcp.c, api_msg.c: fixed bug #37614 "Errors from * tcp_impl.h, tcp_out.c, tcp.c, api_msg.c: fixed bug #37614 "Errors from
ipX_output are not processed". Now tcp_output(_segment) checks for the return ipX_output are not processed". Now tcp_output(_segment) checks for the return

View File

@ -1173,7 +1173,9 @@ lwip_netconn_do_connect(struct api_msg_msg *msg)
#if LWIP_TCP #if LWIP_TCP
case NETCONN_TCP: case NETCONN_TCP:
/* Prevent connect while doing any other action. */ /* Prevent connect while doing any other action. */
if (msg->conn->state != NETCONN_NONE) { if (msg->conn->state == NETCONN_CONNECT) {
msg->err = ERR_ALREADY;
} else if (msg->conn->state != NETCONN_NONE) {
msg->err = ERR_ISCONN; msg->err = ERR_ISCONN;
} else { } else {
setup_tcp(msg->conn); setup_tcp(msg->conn);

View File

@ -258,13 +258,14 @@ static const int err_to_errno_table[] = {
EINVAL, /* ERR_VAL -6 Illegal value. */ EINVAL, /* ERR_VAL -6 Illegal value. */
EWOULDBLOCK, /* ERR_WOULDBLOCK -7 Operation would block. */ EWOULDBLOCK, /* ERR_WOULDBLOCK -7 Operation would block. */
EADDRINUSE, /* ERR_USE -8 Address in use. */ EADDRINUSE, /* ERR_USE -8 Address in use. */
EALREADY, /* ERR_ISCONN -9 Already connected. */ EALREADY, /* ERR_ALREADY -9 Already connecting. */
ENOTCONN, /* ERR_CONN -10 Not connected. */ EISCONN, /* ERR_ISCONN -10 Conn already established.*/
ECONNABORTED, /* ERR_ABRT -11 Connection aborted. */ ENOTCONN, /* ERR_CONN -11 Not connected. */
ECONNRESET, /* ERR_RST -12 Connection reset. */ ECONNABORTED, /* ERR_ABRT -12 Connection aborted. */
ENOTCONN, /* ERR_CLSD -13 Connection closed. */ ECONNRESET, /* ERR_RST -13 Connection reset. */
EIO, /* ERR_ARG -14 Illegal argument. */ ENOTCONN, /* ERR_CLSD -14 Connection closed. */
-1, /* ERR_IF -15 Low-level netif error */ EIO, /* ERR_ARG -15 Illegal argument. */
-1, /* ERR_IF -16 Low-level netif error */
}; };
#define ERR_TO_ERRNO_TABLE_SIZE \ #define ERR_TO_ERRNO_TABLE_SIZE \

View File

@ -58,20 +58,21 @@ typedef s8_t err_t;
#define ERR_VAL -6 /* Illegal value. */ #define ERR_VAL -6 /* Illegal value. */
#define ERR_WOULDBLOCK -7 /* Operation would block. */ #define ERR_WOULDBLOCK -7 /* Operation would block. */
#define ERR_USE -8 /* Address in use. */ #define ERR_USE -8 /* Address in use. */
#define ERR_ISCONN -9 /* Already connected. */ #define ERR_ALREADY -9 /* Already connecting. */
#define ERR_ISCONN -10 /* Conn already established.*/
#define ERR_IS_FATAL(e) ((e) < ERR_ISCONN) #define ERR_IS_FATAL(e) ((e) < ERR_ISCONN)
#define ERR_CONN -10 /* Not connected. */ #define ERR_CONN -11 /* Not connected. */
#define ERR_IS_FATAL_LISTENCONNECT(e) ((e) < ERR_CONN) #define ERR_IS_FATAL_LISTENCONNECT(e) ((e) < ERR_CONN)
#define ERR_ABRT -11 /* Connection aborted. */ #define ERR_ABRT -12 /* Connection aborted. */
#define ERR_RST -12 /* Connection reset. */ #define ERR_RST -13 /* Connection reset. */
#define ERR_CLSD -13 /* Connection closed. */ #define ERR_CLSD -14 /* Connection closed. */
#define ERR_ARG -14 /* Illegal argument. */ #define ERR_ARG -15 /* Illegal argument. */
#define ERR_IF -15 /* Low-level netif error */ #define ERR_IF -16 /* Low-level netif error */
#ifdef LWIP_DEBUG #ifdef LWIP_DEBUG