From 422ba5bcec040e752b3567caa1f4e99021159146 Mon Sep 17 00:00:00 2001 From: goldsimon Date: Wed, 15 Apr 2009 21:13:55 +0000 Subject: [PATCH] tried to fix bug #23559: lwip_recvfrom problem with tcp --- CHANGELOG | 3 +++ src/api/sockets.c | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 0f13a604..de834873 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -83,6 +83,9 @@ HISTORY ++ Bugfixes: + 2009-04-15 Simon Goldschmidt + * sockets.c: tried to fix bug #23559: lwip_recvfrom problem with tcp + 2009-04-15 Simon Goldschmidt * dhcp.c: task #9192: mem_free of dhcp->options_in and dhcp->msg_in diff --git a/src/api/sockets.c b/src/api/sockets.c index 163c71aa..44faa1b7 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -495,6 +495,11 @@ lwip_recvfrom(int s, void *mem, size_t len, int flags, } else { /* If this is non-blocking call, then check first */ if (((flags & MSG_DONTWAIT) || (sock->flags & O_NONBLOCK)) && !sock->rcvevent) { + if (off > 0) { + /* already received data, return that */ + sock_set_errno(sock, 0); + return off; + } LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom(%d): returning EWOULDBLOCK\n", s)); sock_set_errno(sock, EWOULDBLOCK); return -1; @@ -506,6 +511,11 @@ lwip_recvfrom(int s, void *mem, size_t len, int flags, LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom: netconn_recv netbuf=%p\n", (void*)buf)); if (!buf) { + if (off > 0) { + /* already received data, return that */ + sock_set_errno(sock, 0); + return off; + } /* 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->pcb.ip != NULL) && (sock->conn->err == ERR_OK))