Index: dllmain.c =================================================================== --- dll/win32/msafd/misc/dllmain.c (revision 69828) +++ dll/win32/msafd/misc/dllmain.c (working copy) @@ -2127,6 +2127,11 @@ break; case SO_LINGER: + if (Socket->SharedData.SocketType == SOCK_DGRAM) + { + *lpErrno = WSAENOPROTOOPT; + return SOCKET_ERROR; + } Buffer = &Socket->SharedData.LingerData; BufferSize = sizeof(struct linger); break; @@ -2202,7 +2207,8 @@ return 0; default: - break; + *lpErrno = WSAEINVAL; + return SOCKET_ERROR; } SendToHelper: @@ -2239,8 +2245,13 @@ /* FIXME: We should handle some more cases here */ - if (level == SOL_SOCKET) + if (level != SOL_SOCKET) { + *lpErrno = WSAEINVAL; + return SOCKET_ERROR; + } + else + { switch (optname) { case SO_BROADCAST: