Corrected handling of proto==NULL in WINSOCK_getservbyname and
WINSOCK_getservbyport.

diff --git a/dlls/winsock/socket.c b/dlls/winsock/socket.c
index 7ce402c..e35e0a2 100644
--- a/dlls/winsock/socket.c
+++ b/dlls/winsock/socket.c
@@ -1996,17 +1996,20 @@
 	struct servent*     serv;
 	int i = wsi_strtolo( pwsi, name, proto );
 
-	if( i )
-	    if( (serv = getservbyname(pwsi->buffer, pwsi->buffer + i)) != NULL )
+	if( i ) {
+	    serv = getservbyname(pwsi->buffer,
+				 proto ? (pwsi->buffer + i) : NULL);
+	    if( serv != NULL )
 		if( WS_dup_se(pwsi, serv, dup_flag) )
 		    return (struct WIN_servent*)(pwsi->se);
 		else SetLastError(WSAENOBUFS);
 	    else {
                 MESSAGE("service %s protocol %s not found; maybe you have add "
                         "this to /etc/services\n", debugstr_a(pwsi->buffer),
-                        debugstr_a(pwsi->buffer+i)); 
+                        proto ? debugstr_a(pwsi->buffer+i):"*"); 
                 SetLastError(WSANO_DATA);
             }
+	}
 	else SetLastError(WSAENOBUFS);
     } else SetLastError(WSANOTINITIALISED);
     return NULL;
@@ -2039,19 +2042,19 @@
     if( pwsi )
     {
 	struct servent*     serv;
-	int i = wsi_strtolo( pwsi, proto, NULL );
-
-	if( i )
-	    if( (serv = getservbyport(port, pwsi->buffer)) != NULL )
+	if (!proto || wsi_strtolo( pwsi, proto, NULL )) {
+	    if( (serv = getservbyport(port, (proto) ? pwsi->buffer : NULL)) != NULL ) {
 		if( WS_dup_se(pwsi, serv, dup_flag) )
 		    return (struct WIN_servent*)(pwsi->se);
 		else SetLastError(WSAENOBUFS);
+	    }
 	    else {
                 MESSAGE("service on port %d protocol %s not found; maybe you have "
                         "add this to /etc/services\n", ntohl(port),
-                        debugstr_a(pwsi->buffer)); 
+                        proto ? debugstr_a(pwsi->buffer) : "*"); 
                 SetLastError(WSANO_DATA);
             }
+	}
 	else SetLastError(WSAENOBUFS);
     } else SetLastError(WSANOTINITIALISED);
     return NULL;