WS_EnterSingleProtocol needs to handle addressfamily as the WSAPROTOCOL_INFOW struct differs among different addressfamilies. This renders the old WS_EnumProtocols implementation useless resulting in missing WS_EnumProtocolsA and WS_EnumProtocolsW implementations.
Signed-off-by: Robin Ebert ebertrobin2002@gmail.com --- v2: Report not supported error in WS_EnumProtocols --- dlls/ws2_32/socket.c | 225 +++++++++++++++++++++++++++++-------------- 1 file changed, 151 insertions(+), 74 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 4d2afa94..c67527d0 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -2158,23 +2158,20 @@ static INT WS_DuplicateSocket(BOOL unicode, SOCKET s, DWORD dwProcessId, LPWSAPR }
/***************************************************************************** - * WS_EnterSingleProtocolW [internal] + * WS_AF_INET_EnterSingleProtocolW [internal] * * enters the protocol information of one given protocol into the given * buffer. * + * HANDLES AF_INET + * * RETURNS * TRUE if a protocol was entered into the buffer. * - * BUGS - * - only implemented for IPX, SPX, SPXII, TCP, UDP - * - there is no check that the operating system supports the returned - * protocols */ -static BOOL WS_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) +static BOOL WS_AF_INET_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) { - memset( info, 0, sizeof(WSAPROTOCOL_INFOW) ); - info->iProtocol = protocol; + info->iAddressFamily = WS_AF_INET;
switch (protocol) { @@ -2187,7 +2184,6 @@ static BOOL WS_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) info->dwProviderFlags = PFL_MATCHES_PROTOCOL_ZERO; info->ProtocolChain.ChainLen = 1; info->iVersion = 2; - info->iAddressFamily = WS_AF_INET; info->iMaxSockAddr = 0x10; info->iMinSockAddr = 0x10; info->iSocketType = WS_SOCK_STREAM; @@ -2203,7 +2199,6 @@ static BOOL WS_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) info->dwProviderFlags = PFL_MATCHES_PROTOCOL_ZERO; info->ProtocolChain.ChainLen = 1; info->iVersion = 2; - info->iAddressFamily = WS_AF_INET; info->iMaxSockAddr = 0x10; info->iMinSockAddr = 0x10; info->iSocketType = WS_SOCK_DGRAM; @@ -2211,6 +2206,85 @@ static BOOL WS_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) strcpyW( info->szProtocol, NameUdpW ); break;
+ default: + FIXME("unknown Protocol <0x%08x>\n", protocol); + return FALSE; + } + return TRUE; +} +/***************************************************************************** + * WS_AF_INET6_EnterSingleProtocolW [internal] + * + * enters the protocol information of one given protocol into the given + * buffer. + * + * HANDLES AF_INET6 + * + * RETURNS + * TRUE if a protocol was entered into the buffer. + * + */ +static BOOL WS_AF_INET6_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) +{ + info->iAddressFamily = WS_AF_INET6; + + switch (protocol) + { + case WS_IPPROTO_TCP: + info->dwServiceFlags1 = XP1_IFS_HANDLES | XP1_EXPEDITED_DATA | + XP1_GRACEFUL_CLOSE | XP1_GUARANTEED_ORDER | + XP1_GUARANTEED_DELIVERY; + info->ProviderId = ProviderIdIP; + info->dwCatalogEntryId = 0x3ec; + info->dwProviderFlags = PFL_MATCHES_PROTOCOL_ZERO; + info->ProtocolChain.ChainLen = 1; + info->iVersion = 2; + info->iMaxSockAddr = 0x1c; + info->iMinSockAddr = 0x1c; + info->iSocketType = WS_SOCK_STREAM; + strcpyW( info->szProtocol, NameTcpW ); + break; + + case WS_IPPROTO_UDP: + info->dwServiceFlags1 = XP1_IFS_HANDLES | XP1_SUPPORT_BROADCAST | + XP1_SUPPORT_MULTIPOINT | XP1_MESSAGE_ORIENTED | + XP1_CONNECTIONLESS; + info->ProviderId = ProviderIdIP; + info->dwCatalogEntryId = 0x3ea; + info->dwProviderFlags = PFL_MATCHES_PROTOCOL_ZERO; + info->ProtocolChain.ChainLen = 1; + info->iVersion = 2; + info->iMaxSockAddr = 0x1c; + info->iMinSockAddr = 0x1c; + info->iSocketType = WS_SOCK_DGRAM; + info->dwMessageSize = 0xffbb; + strcpyW( info->szProtocol, NameUdpW ); + break; + + default: + FIXME("unknown Protocol <0x%08x>\n", protocol); + return FALSE; + } + return TRUE; +} +/***************************************************************************** + * WS_AF_IPX_EnterSingleProtocolW [internal] + * + * enters the protocol information of one given protocol into the given + * buffer. + * + * HANDLES AF_IPX + * + * RETURNS + * TRUE if a protocol was entered into the buffer. + * + */ +static BOOL WS_AF_IPX_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) +{ + info->iAddressFamily = WS_AF_IPX; + + switch (protocol) + { case WS_NSPROTO_IPX: info->dwServiceFlags1 = XP1_PARTIAL_MESSAGE | XP1_SUPPORT_BROADCAST | XP1_SUPPORT_MULTIPOINT | XP1_MESSAGE_ORIENTED | @@ -2220,7 +2294,6 @@ static BOOL WS_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) info->dwProviderFlags = PFL_MATCHES_PROTOCOL_ZERO; info->ProtocolChain.ChainLen = 1; info->iVersion = 2; - info->iAddressFamily = WS_AF_IPX; info->iMaxSockAddr = 0x10; info->iMinSockAddr = 0x0e; info->iSocketType = WS_SOCK_DGRAM; @@ -2238,7 +2311,6 @@ static BOOL WS_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) info->dwProviderFlags = PFL_MATCHES_PROTOCOL_ZERO; info->ProtocolChain.ChainLen = 1; info->iVersion = 2; - info->iAddressFamily = WS_AF_IPX; info->iMaxSockAddr = 0x10; info->iMinSockAddr = 0x0e; info->iSocketType = WS_SOCK_SEQPACKET; @@ -2255,7 +2327,6 @@ static BOOL WS_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) info->dwProviderFlags = PFL_MATCHES_PROTOCOL_ZERO; info->ProtocolChain.ChainLen = 1; info->iVersion = 2; - info->iAddressFamily = WS_AF_IPX; info->iMaxSockAddr = 0x10; info->iMinSockAddr = 0x0e; info->iSocketType = WS_SOCK_SEQPACKET; @@ -2269,85 +2340,94 @@ static BOOL WS_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) } return TRUE; } - /***************************************************************************** - * WS_EnterSingleProtocolA [internal] + * WS_EnterSingleProtocolW [internal] * - * see function WS_EnterSingleProtocolW + * enters the protocol information of one given protocol into the given + * buffer. * + * RETURNS + * count of returned WSAPROTOCOL_INFOW structs + * + * BUGS + * - only implemented for IPX, SPX, SPXII, TCP, UDP + * - there is no check that the operating system supports the returned + * protocols */ -static BOOL WS_EnterSingleProtocolA( INT protocol, WSAPROTOCOL_INFOA* info ) +static INT WS_EnterSingleProtocolW( INT address_family, INT protocol, WSAPROTOCOL_INFOW info[], INT* info_size ) { - WSAPROTOCOL_INFOW infow; - INT ret; - memset( info, 0, sizeof(WSAPROTOCOL_INFOA) ); + if(address_family) + { + memset( info, 0, sizeof(WSAPROTOCOL_INFOW) ); + info->iProtocol = protocol;
- ret = WS_EnterSingleProtocolW( protocol, &infow ); - if (ret) + switch (address_family) + { + case WS_AF_INET: + WS_AF_INET_EnterSingleProtocolW(protocol, info); + break; + case WS_AF_INET6: + WS_AF_INET6_EnterSingleProtocolW(protocol, info); + break; + case WS_AF_IPX: + WS_AF_IPX_EnterSingleProtocolW(protocol, info); + break; + default: + FIXME("unhandled addressfamily <0x%08x>\n", address_family); + return 0; + } + return 1; + } + else { - /* convert the structure from W to A */ - memcpy( info, &infow, FIELD_OFFSET( WSAPROTOCOL_INFOA, szProtocol ) ); - WideCharToMultiByte( CP_ACP, 0, infow.szProtocol, -1, - info->szProtocol, WSAPROTOCOL_LEN+1, NULL, NULL ); + FIXME("Unspecified address_family not implemented yet\n"); + return 0; } - - return ret; }
-static INT WS_EnumProtocols( BOOL unicode, const INT *protocols, LPWSAPROTOCOL_INFOW buffer, LPDWORD len ) +/***************************************************************************** + * WS_EnterSingleProtocolA [internal] + * + * see function WS_EnterSingleProtocolW + * + */ +static INT WS_EnterSingleProtocolA( INT addressfamily, INT protocol, WSAPROTOCOL_INFOA* info , INT* info_size) { - INT i = 0, items = 0; - DWORD size = 0; - union _info - { - LPWSAPROTOCOL_INFOA a; - LPWSAPROTOCOL_INFOW w; - } info; - info.w = buffer; + WSAPROTOCOL_INFOW* infow; + INT ret, i;
- if (!protocols) protocols = valid_protocols; + infow = HeapAlloc(GetProcessHeap(), 0, sizeof(WSAPROTOCOL_INFOW) * *info_size);
- while (protocols[i]) + ret = WS_EnterSingleProtocolW( addressfamily, protocol, infow, info_size ); + if (ret) { - if(supported_protocol(protocols[i++])) - items++; + for(i = 0; i < ret; i++) + { + /* convert the structure from W to A */ + memcpy( &info[i], &infow[i], FIELD_OFFSET( WSAPROTOCOL_INFOA, szProtocol ) ); + WideCharToMultiByte( CP_ACP, 0, infow[i].szProtocol, -1, + info[i].szProtocol, WSAPROTOCOL_LEN+1, NULL, NULL ); + } }
- size = items * (unicode ? sizeof(WSAPROTOCOL_INFOW) : sizeof(WSAPROTOCOL_INFOA)); - - TRACE("unicode %d, protocols %p, buffer %p, length %p %d, items %d, required %d\n", - unicode, protocols, buffer, len, len ? *len : 0, items, size); + HeapFree(GetProcessHeap(), 0, infow);
- if (*len < size || !buffer) - { - *len = size; - SetLastError(WSAENOBUFS); - return SOCKET_ERROR; - } + return ret; +}
- for (i = items = 0; protocols[i]; i++) - { - if (!supported_protocol(protocols[i])) continue; - if (unicode) - { - if (WS_EnterSingleProtocolW( protocols[i], &info.w[items] )) - items++; - } - else - { - if (WS_EnterSingleProtocolA( protocols[i], &info.a[items] )) - items++; - } - } - return items; +static INT WS_EnumProtocols( BOOL unicode, const INT *protocols, LPWSAPROTOCOL_INFOW buffer, LPDWORD len ) +{ + FIXME("Not implemented\n"); + WSASetLastError(WSAEOPNOTSUPP); + return SOCKET_ERROR; }
static BOOL ws_protocol_info(SOCKET s, int unicode, WSAPROTOCOL_INFOW *buffer, int *size) { NTSTATUS status; int address_family; - int socket_type; int protocol; + int buffer_size = 1;
*size = unicode ? sizeof(WSAPROTOCOL_INFOW) : sizeof(WSAPROTOCOL_INFOA); memset(buffer, 0, *size); @@ -2359,7 +2439,6 @@ static BOOL ws_protocol_info(SOCKET s, int unicode, WSAPROTOCOL_INFOW *buffer, i if (!status) { address_family = convert_af_u2w(reply->family); - socket_type = convert_socktype_u2w(reply->type); protocol = convert_proto_u2w(reply->protocol); } } @@ -2373,12 +2452,9 @@ static BOOL ws_protocol_info(SOCKET s, int unicode, WSAPROTOCOL_INFOW *buffer, i }
if (unicode) - WS_EnterSingleProtocolW( protocol, buffer); + WS_EnterSingleProtocolW( address_family, protocol, buffer, &buffer_size); else - WS_EnterSingleProtocolA( protocol, (WSAPROTOCOL_INFOA *)buffer); - buffer->iAddressFamily = address_family; - buffer->iSocketType = socket_type; - buffer->iProtocol = protocol; + WS_EnterSingleProtocolA( address_family, protocol, (WSAPROTOCOL_INFOA *)buffer, &buffer_size);
return TRUE; } @@ -7578,6 +7654,7 @@ SOCKET WINAPI WSASocketW(int af, int type, int protocol, { int autoproto = protocol; WSAPROTOCOL_INFOW infow; + int infow_size = 1;
/* default to the first valid protocol */ if (!autoproto) @@ -7585,7 +7662,7 @@ SOCKET WINAPI WSASocketW(int af, int type, int protocol, else if(IS_IPX_PROTO(autoproto)) autoproto = WS_NSPROTO_IPX;
- if (WS_EnterSingleProtocolW(autoproto, &infow)) + if (WS_EnterSingleProtocolW(af, autoproto, &infow, &infow_size)) { type = infow.iSocketType;
WS_EnumProtocols broke with changes to WS_EnterSingleProtocol{W|A} so it needs to be reimplemented.
Signed-off-by: Robin Ebert ebertrobin2002@gmail.com --- v2: Fix wrong iProtocol values in WS_EnumProtocols --- dlls/ws2_32/socket.c | 97 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 91 insertions(+), 6 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index c67527d0..9387801c 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -2172,6 +2172,7 @@ static INT WS_DuplicateSocket(BOOL unicode, SOCKET s, DWORD dwProcessId, LPWSAPR static BOOL WS_AF_INET_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) { info->iAddressFamily = WS_AF_INET; + info->iProtocol = protocol;
switch (protocol) { @@ -2227,6 +2228,7 @@ static BOOL WS_AF_INET_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* in static BOOL WS_AF_INET6_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) { info->iAddressFamily = WS_AF_INET6; + info->iProtocol = protocol;
switch (protocol) { @@ -2282,6 +2284,7 @@ static BOOL WS_AF_INET6_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* i static BOOL WS_AF_IPX_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* info ) { info->iAddressFamily = WS_AF_IPX; + info->iProtocol = protocol;
switch (protocol) { @@ -2348,6 +2351,7 @@ static BOOL WS_AF_IPX_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* inf * * RETURNS * count of returned WSAPROTOCOL_INFOW structs + * *len contains the amount of needed WSAPROTOCOL_INFOW entries available if the buffer was too small * * BUGS * - only implemented for IPX, SPX, SPXII, TCP, UDP @@ -2358,8 +2362,8 @@ static INT WS_EnterSingleProtocolW( INT address_family, INT protocol, WSAPROTOCO { if(address_family) { + /* the buffer needs to be valid here. This should be checked by the caller */ memset( info, 0, sizeof(WSAPROTOCOL_INFOW) ); - info->iProtocol = protocol;
switch (address_family) { @@ -2380,8 +2384,39 @@ static INT WS_EnterSingleProtocolW( INT address_family, INT protocol, WSAPROTOCO } else { - FIXME("Unspecified address_family not implemented yet\n"); - return 0; + /* the buffer can be too small so we need our own as well */ + INT ret = 0, min_buffer = 0; + WSAPROTOCOL_INFOW infow; + WSAPROTOCOL_INFOW* buffer; + + buffer = *info_size - ret ? &info[ret] : &infow; + if(WS_AF_INET_EnterSingleProtocolW(protocol, buffer)) + { + min_buffer++; + if(buffer != &infow) + ret++; + + buffer = *info_size - ret ? &info[ret] : &infow; + } + if(WS_AF_INET6_EnterSingleProtocolW(protocol, buffer)) + { + min_buffer++; + if(buffer != &infow) + ret++; + + buffer = *info_size - ret ? &info[ret] : &infow; + } + if(WS_AF_IPX_EnterSingleProtocolW(protocol, buffer)) + { + min_buffer++; + if(buffer != &infow) + ret++; + } + + if(min_buffer > *info_size) + *info_size = min_buffer; + + return ret; } }
@@ -2417,9 +2452,59 @@ static INT WS_EnterSingleProtocolA( INT addressfamily, INT protocol, WSAPROTOCOL
static INT WS_EnumProtocols( BOOL unicode, const INT *protocols, LPWSAPROTOCOL_INFOW buffer, LPDWORD len ) { - FIXME("Not implemented\n"); - WSASetLastError(WSAEOPNOTSUPP); - return SOCKET_ERROR; + INT i = 0, items = 0, space, temp, space_temp, min_buffer_size; + DWORD size = 0; + union _info + { + LPWSAPROTOCOL_INFOA a; + LPWSAPROTOCOL_INFOW w; + } info; + info.w = buffer; + + if (!protocols) protocols = valid_protocols; + + size = unicode ? sizeof(WSAPROTOCOL_INFOW) : sizeof(WSAPROTOCOL_INFOA); + + TRACE("unicode %d, protocols %p, buffer %p, length %p %d\n", + unicode, protocols, buffer, len, len ? *len : 0); + + if (*len < size || !buffer) + { + /* len should return the count of needed space */ + *len = 0; + SetLastError(WSAENOBUFS); + } + + + min_buffer_size = 0; + space = *len / (unicode ? sizeof(WSAPROTOCOL_INFOW) : sizeof(WSAPROTOCOL_INFOA)); + for (i = items = 0; protocols[i]; i++) + { + if (!supported_protocol(protocols[i])) continue; + space_temp = space; /* WS_EnterSingleProtocol may alter this value */ + if (unicode) + { + temp = WS_EnterSingleProtocolW( WS_AF_UNSPEC, protocols[i], &info.w[items], &space_temp ); + } + else + { + temp = WS_EnterSingleProtocolA( WS_AF_UNSPEC, protocols[i], &info.a[items], &space_temp ); + } + min_buffer_size += space_temp != space ? space_temp : temp; /* if WS_EnterSingleProtocol altered it we need to use this value */ + items += temp; + space -= temp; + } + size = min_buffer_size * (unicode ? sizeof(WSAPROTOCOL_INFOW) : sizeof(WSAPROTOCOL_INFOA)); + if(*len == 0) + { + /* if len is 0 it's either passed in or explicitly set resulting in an error */ + *len = size; + return SOCKET_ERROR; + } + else if(size > *len) + /* len should return the count of needed space */ + *len = size; + return items; }
static BOOL ws_protocol_info(SOCKET s, int unicode, WSAPROTOCOL_INFOW *buffer, int *size)
Signed-off-by: Robin Ebert ebertrobin2002@gmail.com --- dlls/ws2_32/socket.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 9387801c..d3083f8b 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -190,6 +190,8 @@ static const WCHAR NameSpxW[] = {'S', 'P', 'X', '\0'}; static const WCHAR NameSpxIIW[] = {'S', 'P', 'X', ' ', 'I', 'I', '\0'}; static const WCHAR NameTcpW[] = {'T', 'C', 'P', '/', 'I', 'P', '\0'}; static const WCHAR NameUdpW[] = {'U', 'D', 'P', '/', 'I', 'P', '\0'}; +static const WCHAR NameTcp6W[] = {'T', 'C', 'P', '/', 'I', 'P', 'v', '6', '\0'}; +static const WCHAR NameUdp6W[] = {'U', 'D', 'P', '/', 'I', 'P', 'v', '6', '\0'};
/* Taken from Win2k */ static const GUID ProviderIdIP = { 0xe70f1aa0, 0xab8b, 0x11cf, @@ -198,6 +200,9 @@ static const GUID ProviderIdIPX = { 0x11058240, 0xbe47, 0x11cf, { 0x95, 0xc8, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92 } }; static const GUID ProviderIdSPX = { 0x11058241, 0xbe47, 0x11cf, { 0x95, 0xc8, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92 } }; +/* Taken from Win 10 */ +static const GUID ProviderIdIP6 = { 4192907456, 9940, 4560, + { 187, 191, 0, 170, 0, 108, 52, 228 } };
static const INT valid_protocols[] = { @@ -2236,7 +2241,7 @@ static BOOL WS_AF_INET6_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* i info->dwServiceFlags1 = XP1_IFS_HANDLES | XP1_EXPEDITED_DATA | XP1_GRACEFUL_CLOSE | XP1_GUARANTEED_ORDER | XP1_GUARANTEED_DELIVERY; - info->ProviderId = ProviderIdIP; + info->ProviderId = ProviderIdIP6; info->dwCatalogEntryId = 0x3ec; info->dwProviderFlags = PFL_MATCHES_PROTOCOL_ZERO; info->ProtocolChain.ChainLen = 1; @@ -2244,15 +2249,15 @@ static BOOL WS_AF_INET6_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* i info->iMaxSockAddr = 0x1c; info->iMinSockAddr = 0x1c; info->iSocketType = WS_SOCK_STREAM; - strcpyW( info->szProtocol, NameTcpW ); + strcpyW( info->szProtocol, NameTcp6W ); break;
case WS_IPPROTO_UDP: info->dwServiceFlags1 = XP1_IFS_HANDLES | XP1_SUPPORT_BROADCAST | XP1_SUPPORT_MULTIPOINT | XP1_MESSAGE_ORIENTED | XP1_CONNECTIONLESS; - info->ProviderId = ProviderIdIP; - info->dwCatalogEntryId = 0x3ea; + info->ProviderId = ProviderIdIP6; + info->dwCatalogEntryId = 0x3ed; info->dwProviderFlags = PFL_MATCHES_PROTOCOL_ZERO; info->ProtocolChain.ChainLen = 1; info->iVersion = 2; @@ -2260,7 +2265,7 @@ static BOOL WS_AF_INET6_EnterSingleProtocolW( INT protocol, WSAPROTOCOL_INFOW* i info->iMinSockAddr = 0x1c; info->iSocketType = WS_SOCK_DGRAM; info->dwMessageSize = 0xffbb; - strcpyW( info->szProtocol, NameUdpW ); + strcpyW( info->szProtocol, NameUdp6W ); break;
default:
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=77065
Your paranoid android.
=== debiant (32 bit report) ===
ws2_32: protocol.c:71: Test failed: Expected 10055, received 10045 protocol.c:78: Test failed: Expected 10055, received 10045 protocol.c:85: Test failed: WSAEnumProtocolsA() failed unexpectedly: 10045 protocol.c:103: Test failed: Expected 10055, received 10045 protocol.c:111: Test failed: WSAEnumProtocolsA() failed unexpectedly: 10045 protocol.c:113: Test failed: Expected at least 2 items, received -1 protocol.c:122: Test failed: Expected 2 bits represented as 0xA, received 0x0 protocol.c:138: Test failed: Expected 10055, received 10045 protocol.c:145: Test failed: Expected 10055, received 10045 protocol.c:152: Test failed: WSAEnumProtocolsW() failed unexpectedly: 10045 protocol.c:170: Test failed: Expected 10055, received 10045 protocol.c:178: Test failed: WSAEnumProtocolsW() failed unexpectedly: 10045 protocol.c:180: Test failed: Expected at least 2 items, received -1 protocol.c:189: Test failed: Expected 2 bits represented as 0xA, received 0x0 sock.c:2560: Test failed: WSASocketA should have succeeded sock.c:2585: Test failed: WSAEnumProtocolsA error is 10045, not WSAENOBUFS(10055) sock.c:2596: Test failed: WSAEnumProtocolsA failed, last error is 10045 sock.c:2607: Test failed: Failed to create socket: 10044 sock.c:2632: Test failed: Expected 10047, received 10044 sock.c:2667: Test failed: WSAEnumProtocolsA error is 10045, not WSAENOBUFS(10055) sock.c:2678: Test failed: WSAEnumProtocolsA failed, last error is 10045 sock.c:2709: Test failed: Failed to create socket for protocol 6, received 10044 sock.c:2715: Test failed: getsockopt failed with 10038 sock.c:2729: Test failed: Protocol 6 not found in WSAEnumProtocols sock.c:2709: Test failed: Failed to create socket for protocol 17, received 10044 sock.c:2715: Test failed: getsockopt failed with 10038 sock.c:2729: Test failed: Protocol 17 not found in WSAEnumProtocols
=== debiant (32 bit Chinese:China report) ===
ws2_32: protocol.c:71: Test failed: Expected 10055, received 10045 protocol.c:78: Test failed: Expected 10055, received 10045 protocol.c:85: Test failed: WSAEnumProtocolsA() failed unexpectedly: 10045 protocol.c:103: Test failed: Expected 10055, received 10045 protocol.c:111: Test failed: WSAEnumProtocolsA() failed unexpectedly: 10045 protocol.c:113: Test failed: Expected at least 2 items, received -1 protocol.c:122: Test failed: Expected 2 bits represented as 0xA, received 0x0 protocol.c:138: Test failed: Expected 10055, received 10045 protocol.c:145: Test failed: Expected 10055, received 10045 protocol.c:152: Test failed: WSAEnumProtocolsW() failed unexpectedly: 10045 protocol.c:170: Test failed: Expected 10055, received 10045 protocol.c:178: Test failed: WSAEnumProtocolsW() failed unexpectedly: 10045 protocol.c:180: Test failed: Expected at least 2 items, received -1 protocol.c:189: Test failed: Expected 2 bits represented as 0xA, received 0x0 sock.c:2560: Test failed: WSASocketA should have succeeded sock.c:2585: Test failed: WSAEnumProtocolsA error is 10045, not WSAENOBUFS(10055) sock.c:2596: Test failed: WSAEnumProtocolsA failed, last error is 10045 sock.c:2607: Test failed: Failed to create socket: 10044 sock.c:2632: Test failed: Expected 10047, received 10044 sock.c:2667: Test failed: WSAEnumProtocolsA error is 10045, not WSAENOBUFS(10055) sock.c:2678: Test failed: WSAEnumProtocolsA failed, last error is 10045 sock.c:2709: Test failed: Failed to create socket for protocol 6, received 10044 sock.c:2715: Test failed: getsockopt failed with 10038 sock.c:2729: Test failed: Protocol 6 not found in WSAEnumProtocols sock.c:2709: Test failed: Failed to create socket for protocol 17, received 10044 sock.c:2715: Test failed: getsockopt failed with 10038 sock.c:2729: Test failed: Protocol 17 not found in WSAEnumProtocols
=== debiant (32 bit WoW report) ===
ws2_32: protocol.c:71: Test failed: Expected 10055, received 10045 protocol.c:78: Test failed: Expected 10055, received 10045 protocol.c:85: Test failed: WSAEnumProtocolsA() failed unexpectedly: 10045 protocol.c:103: Test failed: Expected 10055, received 10045 protocol.c:111: Test failed: WSAEnumProtocolsA() failed unexpectedly: 10045 protocol.c:113: Test failed: Expected at least 2 items, received -1 protocol.c:122: Test failed: Expected 2 bits represented as 0xA, received 0x0 protocol.c:138: Test failed: Expected 10055, received 10045 protocol.c:145: Test failed: Expected 10055, received 10045 protocol.c:152: Test failed: WSAEnumProtocolsW() failed unexpectedly: 10045 protocol.c:170: Test failed: Expected 10055, received 10045 protocol.c:178: Test failed: WSAEnumProtocolsW() failed unexpectedly: 10045 protocol.c:180: Test failed: Expected at least 2 items, received -1 protocol.c:189: Test failed: Expected 2 bits represented as 0xA, received 0x0 sock.c:2560: Test failed: WSASocketA should have succeeded sock.c:2585: Test failed: WSAEnumProtocolsA error is 10045, not WSAENOBUFS(10055) sock.c:2596: Test failed: WSAEnumProtocolsA failed, last error is 10045 sock.c:2607: Test failed: Failed to create socket: 10044 sock.c:2632: Test failed: Expected 10047, received 10044 sock.c:2667: Test failed: WSAEnumProtocolsA error is 10045, not WSAENOBUFS(10055) sock.c:2678: Test failed: WSAEnumProtocolsA failed, last error is 10045 sock.c:2709: Test failed: Failed to create socket for protocol 6, received 10044 sock.c:2715: Test failed: getsockopt failed with 10038 sock.c:2729: Test failed: Protocol 6 not found in WSAEnumProtocols sock.c:2709: Test failed: Failed to create socket for protocol 17, received 10044 sock.c:2715: Test failed: getsockopt failed with 10038 sock.c:2729: Test failed: Protocol 17 not found in WSAEnumProtocols
=== debiant (64 bit WoW report) ===
ws2_32: protocol.c:71: Test failed: Expected 10055, received 10045 protocol.c:78: Test failed: Expected 10055, received 10045 protocol.c:85: Test failed: WSAEnumProtocolsA() failed unexpectedly: 10045 protocol.c:103: Test failed: Expected 10055, received 10045 protocol.c:111: Test failed: WSAEnumProtocolsA() failed unexpectedly: 10045 protocol.c:113: Test failed: Expected at least 2 items, received -1 protocol.c:122: Test failed: Expected 2 bits represented as 0xA, received 0x0 protocol.c:138: Test failed: Expected 10055, received 10045 protocol.c:145: Test failed: Expected 10055, received 10045 protocol.c:152: Test failed: WSAEnumProtocolsW() failed unexpectedly: 10045 protocol.c:170: Test failed: Expected 10055, received 10045 protocol.c:178: Test failed: WSAEnumProtocolsW() failed unexpectedly: 10045 protocol.c:180: Test failed: Expected at least 2 items, received -1 protocol.c:189: Test failed: Expected 2 bits represented as 0xA, received 0x0 sock.c:2560: Test failed: WSASocketA should have succeeded sock.c:2585: Test failed: WSAEnumProtocolsA error is 10045, not WSAENOBUFS(10055) sock.c:2596: Test failed: WSAEnumProtocolsA failed, last error is 10045 sock.c:2607: Test failed: Failed to create socket: 10044 sock.c:2632: Test failed: Expected 10047, received 10044 sock.c:2667: Test failed: WSAEnumProtocolsA error is 10045, not WSAENOBUFS(10055) sock.c:2678: Test failed: WSAEnumProtocolsA failed, last error is 10045 sock.c:2709: Test failed: Failed to create socket for protocol 6, received 10044 sock.c:2715: Test failed: getsockopt failed with 10038 sock.c:2729: Test failed: Protocol 6 not found in WSAEnumProtocols sock.c:2709: Test failed: Failed to create socket for protocol 17, received 10044 sock.c:2715: Test failed: getsockopt failed with 10038 sock.c:2729: Test failed: Protocol 17 not found in WSAEnumProtocols
Hi Robin, these are some very interesting patches you've been sending, thank you! Is there a particular application that you are trying to fix? You can make a more compelling case for why the patches should be accepted by including a Wine-Bug line just before the Signed-off-by line.
-Alex
Hi Robin, these are some very interesting patches you've been sending, thank you! Is there a particular application that you are trying to fix? You can make a more compelling case for why the patches should be accepted by including a Wine-Bug line just before the Signed-off-by line.
-Alex
Hi Alex, there is no particular application or bug I wrote this patch for. I just found this while debugging and thought that this could be a potential issue for some applications which depend on some values which differ between IPv4 and IPv6.
-Robin