Hans Leidekker : webservices: Pass AI_PASSIVE when resolving the hostname for a listener socket.

Alexandre Julliard julliard at winehq.org
Tue Jun 6 15:23:30 CDT 2017


Module: wine
Branch: master
Commit: 1fb0e25cfb32438aa0b1439a410e195af0e2fde3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1fb0e25cfb32438aa0b1439a410e195af0e2fde3

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Tue Jun  6 09:56:01 2017 +0200

webservices: Pass AI_PASSIVE when resolving the hostname for a listener socket.

Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/webservices/channel.c  |  4 ++--
 dlls/webservices/listener.c | 14 +++++++++-----
 dlls/webservices/sock.h     |  2 +-
 3 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/dlls/webservices/channel.c b/dlls/webservices/channel.c
index 9fb1944..1fa96a9 100644
--- a/dlls/webservices/channel.c
+++ b/dlls/webservices/channel.c
@@ -637,7 +637,7 @@ static HRESULT connect_channel_tcp( struct channel *channel )
 
     winsock_init();
 
-    hr = resolve_hostname( host, port, addr, &addr_len );
+    hr = resolve_hostname( host, port, addr, &addr_len, 0 );
     heap_free( host );
     if (hr != S_OK) return hr;
 
@@ -675,7 +675,7 @@ static HRESULT connect_channel_udp( struct channel *channel )
 
     winsock_init();
 
-    hr = resolve_hostname( host, port, addr, &addr_len );
+    hr = resolve_hostname( host, port, addr, &addr_len, 0 );
     heap_free( host );
     if (hr != S_OK) return hr;
 
diff --git a/dlls/webservices/listener.c b/dlls/webservices/listener.c
index 764e002..a658ee7 100644
--- a/dlls/webservices/listener.c
+++ b/dlls/webservices/listener.c
@@ -256,16 +256,20 @@ void WINAPI WsFreeListener( WS_LISTENER *handle )
     free_listener( listener );
 }
 
-HRESULT resolve_hostname( const WCHAR *host, USHORT port, struct sockaddr *addr, int *addr_len )
+HRESULT resolve_hostname( const WCHAR *host, USHORT port, struct sockaddr *addr, int *addr_len, int flags )
 {
     static const WCHAR fmtW[] = {'%','u',0};
     WCHAR service[6];
-    ADDRINFOW *res, *info;
+    ADDRINFOW hints, *res, *info;
     HRESULT hr = WS_E_ADDRESS_NOT_AVAILABLE;
 
+    memset( &hints, 0, sizeof(hints) );
+    hints.ai_flags  = flags;
+    hints.ai_family = AF_INET;
+
     *addr_len = 0;
     sprintfW( service, fmtW, port );
-    if (GetAddrInfoW( host, service, NULL, &res )) return HRESULT_FROM_WIN32( WSAGetLastError() );
+    if (GetAddrInfoW( host, service, &hints, &res )) return HRESULT_FROM_WIN32( WSAGetLastError() );
 
     info = res;
     while (info && info->ai_family != AF_INET) info = info->ai_next;
@@ -330,7 +334,7 @@ static HRESULT open_listener_tcp( struct listener *listener, const WS_STRING *ur
 
     winsock_init();
 
-    hr = resolve_hostname( host, port, addr, &addr_len );
+    hr = resolve_hostname( host, port, addr, &addr_len, AI_PASSIVE );
     heap_free( host );
     if (hr != S_OK) return hr;
 
@@ -381,7 +385,7 @@ static HRESULT open_listener_udp( struct listener *listener, const WS_STRING *ur
 
     winsock_init();
 
-    hr = resolve_hostname( host, port, addr, &addr_len );
+    hr = resolve_hostname( host, port, addr, &addr_len, AI_PASSIVE );
     heap_free( host );
     if (hr != S_OK) return hr;
 
diff --git a/dlls/webservices/sock.h b/dlls/webservices/sock.h
index e03b91e..282a777 100644
--- a/dlls/webservices/sock.h
+++ b/dlls/webservices/sock.h
@@ -19,6 +19,6 @@
 #include "ws2tcpip.h"
 
 void winsock_init(void) DECLSPEC_HIDDEN;
-HRESULT resolve_hostname( const WCHAR *, USHORT, struct sockaddr *, int * ) DECLSPEC_HIDDEN;
+HRESULT resolve_hostname( const WCHAR *, USHORT, struct sockaddr *, int *, int ) DECLSPEC_HIDDEN;
 HRESULT channel_accept_tcp( SOCKET, HANDLE, HANDLE, WS_CHANNEL * ) DECLSPEC_HIDDEN;
 HRESULT channel_accept_udp( SOCKET, HANDLE, HANDLE, WS_CHANNEL * ) DECLSPEC_HIDDEN;




More information about the wine-cvs mailing list