From e9bd764a7b82767941cac827843f02bd1bfc3d30 Mon Sep 17 00:00:00 2001 From: Bruno Jesus <00cpxxx@gmail.com> Date: Wed, 18 Sep 2013 17:36:25 -0300 Subject: [PATCH] ws2_32: Make getsockopt(SO_TYPE) convert the returned socket type. --- dlls/ws2_32/socket.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 8a790f30375..2cb077ee44a 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -2937,7 +2937,6 @@ INT WINAPI WS_getsockopt(SOCKET s, INT level, case WS_SO_RCVBUF: case WS_SO_REUSEADDR: case WS_SO_SNDBUF: - case WS_SO_TYPE: if ( (fd = get_sock_fd( s, 0, NULL )) == -1) return SOCKET_ERROR; convert_sockopt(&level, &optname); @@ -3136,6 +3135,27 @@ INT WINAPI WS_getsockopt(SOCKET s, INT level, return ret; } #endif + case WS_SO_TYPE: + { + if (!optlen || *optlen < sizeof(int) || !optval) + { + SetLastError(WSAEFAULT); + return SOCKET_ERROR; + } + if ( (fd = get_sock_fd( s, 0, NULL )) == -1) + return SOCKET_ERROR; + + if (getsockopt(fd, SOL_SOCKET, SO_TYPE, optval, (socklen_t *)optlen) != 0 ) + { + SetLastError((errno == EBADF) ? WSAENOTSOCK : wsaErrno()); + ret = SOCKET_ERROR; + } + else + (*(int *)optval) = convert_socktype_u2w(*(int *)optval); + + release_sock_fd( s, fd ); + return ret; + } default: TRACE("Unknown SOL_SOCKET optname: 0x%08x\n", optname); SetLastError(WSAENOPROTOOPT); -- 2.11.4.GIT