From 95f2d48ac477dbdc4576b11a2f0cdb0f6834996a Mon Sep 17 00:00:00 2001 From: fbernon Date: Thu, 13 Sep 2007 15:03:42 +0000 Subject: [PATCH] Avoid to lost previous error codes in sockets.c and api_lib.c. --- src/api/api_lib.c | 6 +++++- src/api/sockets.c | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/api/api_lib.c b/src/api/api_lib.c index 570e9bf2..ec1bd746 100644 --- a/src/api/api_lib.c +++ b/src/api/api_lib.c @@ -424,6 +424,7 @@ netconn_recv(struct netconn *conn) #if LWIP_SO_RCVTIMEO if (sys_arch_mbox_fetch(conn->recvmbox, (void *)&p, conn->recv_timeout)==SYS_ARCH_TIMEOUT) { + conn->err = ERR_TIMEOUT; p = NULL; } #else @@ -444,7 +445,10 @@ netconn_recv(struct netconn *conn) /* If we are closed, we indicate that we no longer wish to use the socket */ if (p == NULL) { memp_free(MEMP_NETBUF, buf); - conn->err = ERR_CLSD; + /* Avoid to lost any previous error code */ + if (conn->err == ERR_OK) { + conn->err = ERR_CLSD; + } return NULL; } diff --git a/src/api/sockets.c b/src/api/sockets.c index bce8b8cd..74ee6086 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -417,7 +417,7 @@ lwip_recvfrom(int s, void *mem, int len, unsigned int flags, if (!buf) { /* We should really do some error checking here. */ LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom(%d): buf == NULL!\n", s)); - sock_set_errno(sock, (sock->conn->type==NETCONN_UDP)?ETIMEDOUT:0); + sock_set_errno(sock, (((sock->conn->pcb.ip!=NULL) && (sock->conn->err==ERR_OK))?ETIMEDOUT:err_to_errno(sock->conn->err))); return 0; } }