Index: msafd/misc/dllmain.c =================================================================== --- msafd/misc/dllmain.c (revision 42099) +++ msafd/misc/dllmain.c (working copy) @@ -341,6 +341,10 @@ DbgPrint("MSAFD: STATUS_INVALID_CONNECTION\n"); *Errno = WSAEAFNOSUPPORT; break; + case STATUS_INVALID_ADDRESS: + DbgPrint("MSAFD: STATUS_INVALID_ADDRESS\n"); + *Errno = WSAEADDRNOTAVAIL; + break; case STATUS_REMOTE_NOT_LISTENING: DbgPrint("MSAFD: STATUS_REMOTE_NOT_LISTENING\n"); *Errno = WSAECONNREFUSED; @@ -2289,6 +2293,7 @@ /* FIXME: THIS IS NOT RIGHT!!! HACK HACK HACK! */ case AFD_EVENT_CONNECT: + case AFD_EVENT_CONNECT_FAIL: if (0 != (Socket->SharedData.AsyncEvents & FD_CONNECT) && 0 == (Socket->SharedData.AsyncDisabledEvents & FD_CONNECT)) { Index: ws2_32/misc/stubs.c =================================================================== --- ws2_32/misc/stubs.c (revision 42099) +++ ws2_32/misc/stubs.c (working copy) @@ -510,10 +510,33 @@ IN USHORT hostshort, OUT USHORT FAR* lpnetshort) { - UNIMPLEMENTED + if (!WSAINITIALIZED) + { + WSASetLastError(WSANOTINITIALISED); + return SOCKET_ERROR; + } - WSASetLastError(WSASYSCALLFAILURE); - return SOCKET_ERROR; + PCATALOG_ENTRY provider; + if (!ReferenceProviderByHandle((HANDLE)s, &provider)) + { + WSASetLastError(WSAENOTSOCK); + return SOCKET_ERROR; + } + + switch (provider->ProtocolInfo.iNetworkByteOrder) + { + case BIGENDIAN: + *lpnetshort = htons(hostshort); + break; + case LITTLEENDIAN: +#ifdef LE + *lpnetshort = hostshort; +#else + *lpnetshort = (((hostshort & 0xFF00) >> 8) | ((hostshort & 0x00FF) << 8)); +#endif + break; + } + return 0; } @@ -576,10 +599,33 @@ IN USHORT netshort, OUT USHORT FAR* lphostshort) { - UNIMPLEMENTED + if (!WSAINITIALIZED) + { + WSASetLastError(WSANOTINITIALISED); + return SOCKET_ERROR; + } - WSASetLastError(WSASYSCALLFAILURE); - return SOCKET_ERROR; + PCATALOG_ENTRY provider; + if (!ReferenceProviderByHandle((HANDLE)s, &provider)) + { + WSASetLastError(WSAENOTSOCK); + return SOCKET_ERROR; + } + + switch (provider->ProtocolInfo.iNetworkByteOrder) + { + case BIGENDIAN: + *lphostshort = ntohs(netshort); + break; + case LITTLEENDIAN: +#ifdef LE + *lphostshort = netshort; +#else + *lphostshort = (((netshort & 0xFF00) >> 8) | ((netshort & 0x00FF) << 8)); +#endif + break; + } + return 0; }