Browse Source

compat: add missing errno on Winsock errors

Some of the error codes [1] correspond to errno values [2]

[1] https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2
[2] https://docs.microsoft.com/en-us/cpp/c-runtime-library/errno-constants
pull/136/head
Steve Lhomme 4 years ago
committed by Felix Paul Kühne
parent
commit
ddcc2cdcff
  1. 42
      compat/recvmsg.c
  2. 42
      compat/sendmsg.c

42
compat/recvmsg.c

@ -74,11 +74,51 @@ ssize_t recvmsg(int fd, struct msghdr *msg, int flags)
return rcvd;
}
switch (WSAGetLastError())
int err = WSAGetLastError();
switch (err)
{
case WSAEWOULDBLOCK:
errno = EAGAIN;
break;
case WSA_NOT_ENOUGH_MEMORY:
errno = ENOMEM;
break;
case WSAEAFNOSUPPORT:
errno = EAFNOSUPPORT;
break;
case WSAENOBUFS:
errno = ENOBUFS;
break;
case WSAEINPROGRESS:
errno = EINPROGRESS;
break;
case WSAEINTR:
errno = EINTR;
break;
case WSAEBADF:
errno = EBADF;
break;
case WSAEACCES:
errno = EACCES;
break;
case WSAEFAULT:
errno = EFAULT;
break;
case WSAEINVAL:
errno = EINVAL;
break;
case WSAEMFILE:
errno = EMFILE;
break;
case WSAEALREADY:
errno = EALREADY;
break;
case WSAECONNRESET:
errno = ECONNRESET;
break;
default:
errno = err;
break;
}
return -1;
}

42
compat/sendmsg.c

@ -64,11 +64,51 @@ ssize_t sendmsg(int fd, const struct msghdr *msg, int flags)
if (ret == 0)
return sent;
switch (WSAGetLastError())
int err = WSAGetLastError();
switch (err)
{
case WSAEWOULDBLOCK:
errno = EAGAIN;
break;
case WSA_NOT_ENOUGH_MEMORY:
errno = ENOMEM;
break;
case WSAEAFNOSUPPORT:
errno = EAFNOSUPPORT;
break;
case WSAENOBUFS:
errno = ENOBUFS;
break;
case WSAEINPROGRESS:
errno = EINPROGRESS;
break;
case WSAEINTR:
errno = EINTR;
break;
case WSAEBADF:
errno = EBADF;
break;
case WSAEACCES:
errno = EACCES;
break;
case WSAEFAULT:
errno = EFAULT;
break;
case WSAEINVAL:
errno = EINVAL;
break;
case WSAEMFILE:
errno = EMFILE;
break;
case WSAEALREADY:
errno = EALREADY;
break;
case WSAECONNRESET:
errno = ECONNRESET;
break;
default:
errno = err;
break;
}
return -1;
}

Loading…
Cancel
Save