Index: dll/win32/msafd/misc/dllmain.c =================================================================== --- dll/win32/msafd/misc/dllmain.c (revision 69787) +++ dll/win32/msafd/misc/dllmain.c (working copy) @@ -73,6 +73,22 @@ TRACE("Creating Socket, getting TDI Name - AddressFamily (%d) SocketType (%d) Protocol (%d).\n", AddressFamily, SocketType, Protocol); + if (AddressFamily == AF_UNSPEC && SocketType == 0 && Protocol == 0) + return WSAEINVAL; + + /* Set the defaults */ + if (AddressFamily == AF_UNSPEC) + AddressFamily = AF_INET; + if (SocketType == 0) + SocketType = SOCK_STREAM; + if (Protocol == 0) + { + if (SocketType == SOCK_STREAM) + Protocol = IPPROTO_TCP; + if (SocketType == SOCK_DGRAM) + Protocol = IPPROTO_UDP; + } + /* Get Helper Data and Transport */ Status = SockGetTdiName (&AddressFamily, &SocketType, @@ -2205,7 +2221,8 @@ return 0; default: - break; + *lpErrno = WSAEINVAL; + return SOCKET_ERROR; } SendToHelper: @@ -2242,8 +2259,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: