mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-10-05 22:29:49 +00:00
Another fix for bug #28853 (recv returns 0 on recv-timeout or any other error), fixed err_to_errno_table: ERR_TIMEOUT is EWOULDBLOCK, not ETIMEDOUT
This commit is contained in:
parent
1550c4215d
commit
7699b59e27
@ -126,7 +126,7 @@ static const int err_to_errno_table[] = {
|
|||||||
0, /* ERR_OK 0 No error, everything OK. */
|
0, /* ERR_OK 0 No error, everything OK. */
|
||||||
ENOMEM, /* ERR_MEM -1 Out of memory error. */
|
ENOMEM, /* ERR_MEM -1 Out of memory error. */
|
||||||
ENOBUFS, /* ERR_BUF -2 Buffer error. */
|
ENOBUFS, /* ERR_BUF -2 Buffer error. */
|
||||||
ETIMEDOUT, /* ERR_TIMEOUT -3 Timeout */
|
EWOULDBLOCK, /* ERR_TIMEOUT -3 Timeout */
|
||||||
EHOSTUNREACH, /* ERR_RTE -4 Routing problem. */
|
EHOSTUNREACH, /* ERR_RTE -4 Routing problem. */
|
||||||
EINPROGRESS, /* ERR_INPROGRESS -5 Operation in progress */
|
EINPROGRESS, /* ERR_INPROGRESS -5 Operation in progress */
|
||||||
EINVAL, /* ERR_VAL -6 Illegal value. */
|
EINVAL, /* ERR_VAL -6 Illegal value. */
|
||||||
@ -499,7 +499,7 @@ lwip_recvfrom(int s, void *mem, size_t len, int flags,
|
|||||||
struct netbuf *buf;
|
struct netbuf *buf;
|
||||||
u16_t buflen, copylen;
|
u16_t buflen, copylen;
|
||||||
int off = 0;
|
int off = 0;
|
||||||
ip_addr_t *addr;
|
ip_addr_t *addr;
|
||||||
u16_t port;
|
u16_t port;
|
||||||
u8_t done = 0;
|
u8_t done = 0;
|
||||||
err_t err;
|
err_t err;
|
||||||
@ -544,7 +544,11 @@ lwip_recvfrom(int s, void *mem, size_t len, int flags,
|
|||||||
LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom(%d): buf == NULL, error is \"%s\"!\n",
|
LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_recvfrom(%d): buf == NULL, error is \"%s\"!\n",
|
||||||
s, lwip_strerr(err)));
|
s, lwip_strerr(err)));
|
||||||
sock_set_errno(sock, err_to_errno(err));
|
sock_set_errno(sock, err_to_errno(err));
|
||||||
return -1;
|
if (err == ERR_CLSD) {
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
LWIP_ASSERT("buf != NULL", buf != NULL);
|
LWIP_ASSERT("buf != NULL", buf != NULL);
|
||||||
sock->lastdata = buf;
|
sock->lastdata = buf;
|
||||||
@ -628,7 +632,7 @@ lwip_recvfrom(int s, void *mem, size_t len, int flags,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* If we don't peek the incoming message... */
|
/* If we don't peek the incoming message... */
|
||||||
if ((flags & MSG_PEEK)==0) {
|
if ((flags & MSG_PEEK) == 0) {
|
||||||
/* If this is a TCP socket, check if there is data left in the
|
/* If this is a TCP socket, check if there is data left in the
|
||||||
buffer. If so, it should be saved in the sock structure for next
|
buffer. If so, it should be saved in the sock structure for next
|
||||||
time around. */
|
time around. */
|
||||||
|
Loading…
Reference in New Issue
Block a user