diff --git a/src/api/sockets.c b/src/api/sockets.c index 381a3900..c8294cd6 100644 --- a/src/api/sockets.c +++ b/src/api/sockets.c @@ -321,8 +321,9 @@ static const int err_to_errno_table[] = { #endif /* LWIP_SOCKET_SET_ERRNO */ #define sock_set_errno(sk, e) do { \ - sk->err = (e); \ - set_errno(sk->err); \ + const int sockerr = (e); \ + sk->err = (u8_t)sockerr; \ + set_errno(sockerr); \ } while (0) /* Forward declaration of some functions */ @@ -1729,7 +1730,7 @@ lwip_getsockopt_impl(int s, int level, int optname, void *optval, socklen_t *opt if (((sock->err == 0) || (sock->err == EINPROGRESS)) && (sock->conn != NULL)) { sock_set_errno(sock, err_to_errno(sock->conn->last_err)); } - *(int *)optval = sock->err; + *(int *)optval = (sock->err == 0xFF ? (int)-1 : (int)sock->err); sock->err = 0; LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_getsockopt(%d, SOL_SOCKET, SO_ERROR) = %d\n", s, *(int *)optval));