This is the mail archive of the cygwin-patches mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] Handling non-winsock flags in fhandler_socket.cc


Hello,

 I found a problem with sendmsg() failng when MSG_NOSIGNAL is used. It
looks like MSG_WINMASK is used in sendto() but not in sendmsg().

The patch that should fix the problem is made against
fhandler_socket.cc revision 1.176 ("should" because I did not get
around to compile the whole shebang). It clears extra flags when
calling ws2 functions in all cases of sendmsg(), recvmsg() and
recvfrom().

--
Pekka.Pessi@{nokia.com,iki.fi}
--- fhandler_socket.cc.virgin	2005-12-07 16:54:41.888415954 +0200
+++ fhandler_socket.cc	2005-12-07 16:58:43.031808869 +0200
@@ -1041,7 +1041,7 @@ fhandler_socket::recvfrom (void *ptr, si
 	{
 	  do
 	    {
-	      DWORD lflags = (DWORD) flags;
+	      DWORD lflags = (DWORD) (MSG_WINMASK & flags);
 	      res = WSARecvFrom (get_socket (), &wsabuf, 1, &ret, &lflags,
 				 from, fromlen, NULL, NULL);
 	    }
@@ -1118,8 +1118,9 @@ fhandler_socket::recvmsg (struct msghdr 
   DWORD ret = 0;
 
   if (is_nonblocking () || closed () || async_io ())
+    DWORD lflags = (DWORD) (MSG_WINMASK & flags);
     res = WSARecvFrom (get_socket (), wsabuf, iovcnt, &ret,
-		       (DWORD *) &flags, from, fromlen, NULL, NULL);
+		       &lflags, from, fromlen, NULL, NULL);
   else
     {
       HANDLE evt;
@@ -1127,7 +1128,7 @@ fhandler_socket::recvmsg (struct msghdr 
 	{
 	  do
 	    {
-	      DWORD lflags = (DWORD) flags;
+	      DWORD lflags = (DWORD) (MSG_WINMASK & flags);
 	      res = WSARecvFrom (get_socket (), wsabuf, iovcnt, &ret,
 				 &lflags, from, fromlen, NULL, NULL);
 	    }
@@ -1271,7 +1272,7 @@ fhandler_socket::sendmsg (const struct m
 
   if (is_nonblocking () || closed () || async_io ())
     res = WSASendTo (get_socket (), wsabuf, iovcnt, &ret,
-		     flags, (struct sockaddr *) msg->msg_name,
+		     flags & MSG_WINMASK, (struct sockaddr *) msg->msg_name,
 		     msg->msg_namelen, NULL, NULL);
   else
     {
@@ -1281,7 +1282,7 @@ fhandler_socket::sendmsg (const struct m
 	  do
 	    {
 	      res = WSASendTo (get_socket (), wsabuf, iovcnt,
-			       &ret, flags,
+			       &ret, flags & MSG_WINMASK,
 			       (struct sockaddr *) msg->msg_name,
 			       msg->msg_namelen, NULL, NULL);
 	    }




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]