Module: wine Branch: master Commit: 2ba41754593bcc5dc5bec4a163f39ef15d703cc0 URL: https://source.winehq.org/git/wine.git/?a=commit;h=2ba41754593bcc5dc5bec4a16...
Author: Zebediah Figura z.figura12@gmail.com Date: Thu Jun 24 22:32:48 2021 -0500
ws2_32: Implement setsockopt(SO_DONTLINGER) on top of Win32 setsockopt(SO_LINGER).
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ws2_32/socket.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 112376e583c..776268b381a 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -3506,7 +3506,6 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname, { int fd; int woptval; - struct linger linger; struct timeval tval; struct ip_mreq_source mreq_source;
@@ -3529,6 +3528,21 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname, case WS_SO_BROADCAST: return server_setsockopt( s, IOCTL_AFD_WINE_SET_SO_BROADCAST, optval, optlen );
+ case WS_SO_DONTLINGER: + { + struct WS_linger linger; + + if (!optval) + { + SetLastError( WSAEFAULT ); + return -1; + } + + linger.l_onoff = !*(const BOOL *)optval; + linger.l_linger = 0; + return WS_setsockopt( s, WS_SOL_SOCKET, WS_SO_LINGER, (char *)&linger, sizeof(linger) ); + } + case WS_SO_ERROR: FIXME( "SO_ERROR, stub!\n" ); SetLastError( WSAENOPROTOOPT ); @@ -3545,20 +3559,6 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname, * to the general case. Special options that are not passed to * setsockopt follow below that.*/
- case WS_SO_DONTLINGER: - if (!optval) - { - SetLastError(WSAEFAULT); - return SOCKET_ERROR; - } - linger.l_onoff = *(const int*)optval == 0; - linger.l_linger = 0; - level = SOL_SOCKET; - optname = SO_LINGER; - optval = (char*)&linger; - optlen = sizeof(struct linger); - break; - case WS_SO_SNDBUF: if (!*(const int *)optval) {