From 058152e91ec9a37f9a25c1c8d1cb2b7653831385 Mon Sep 17 00:00:00 2001 From: corinna Date: Thu, 8 Dec 2005 10:13:57 +0000 Subject: [PATCH] * fhandler_socket.cc (fhandler_socket::recvfrom): Mask flags with MSG_WINMASK for Windows socket calls. (fhandler_socket::recvmsg): Ditto. (fhandler_socket::sendmsg): Ditto. --- winsup/cygwin/ChangeLog | 8 ++++++++ winsup/cygwin/fhandler_socket.cc | 23 ++++++++++++++--------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index cf95c2865a..dcea0efe80 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,11 @@ +2005-12-08 Pekka Pessi + Corinna Vinschen + + * fhandler_socket.cc (fhandler_socket::recvfrom): Mask flags with + MSG_WINMASK for Windows socket calls. + (fhandler_socket::recvmsg): Ditto. + (fhandler_socket::sendmsg): Ditto. + 2005-12-07 Christopher Faylor * hires.h (hires_ms::initime_ms): Delete. diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc index ec772ff491..57e743afb4 100644 --- a/winsup/cygwin/fhandler_socket.cc +++ b/winsup/cygwin/fhandler_socket.cc @@ -1028,12 +1028,14 @@ fhandler_socket::recvfrom (void *ptr, size_t len, int flags, int res = SOCKET_ERROR; DWORD ret = 0; - flags &= MSG_WINMASK; WSABUF wsabuf = { len, (char *) ptr }; if (is_nonblocking () || closed () || async_io ()) - res = WSARecvFrom (get_socket (), &wsabuf, 1, &ret, - (DWORD *) &flags, from, fromlen, NULL, NULL); + { + DWORD lflags = (DWORD) (flags & MSG_WINMASK); + res = WSARecvFrom (get_socket (), &wsabuf, 1, &ret, + &lflags, from, fromlen, NULL, NULL); + } else { HANDLE evt; @@ -1041,7 +1043,7 @@ fhandler_socket::recvfrom (void *ptr, size_t len, int flags, { do { - DWORD lflags = (DWORD) flags; + DWORD lflags = (DWORD) (flags & MSG_WINMASK); res = WSARecvFrom (get_socket (), &wsabuf, 1, &ret, &lflags, from, fromlen, NULL, NULL); } @@ -1118,8 +1120,11 @@ fhandler_socket::recvmsg (struct msghdr *msg, int flags, ssize_t tot) DWORD ret = 0; if (is_nonblocking () || closed () || async_io ()) - res = WSARecvFrom (get_socket (), wsabuf, iovcnt, &ret, - (DWORD *) &flags, from, fromlen, NULL, NULL); + { + DWORD lflags = (DWORD) (flags & MSG_WINMASK); + res = WSARecvFrom (get_socket (), wsabuf, iovcnt, &ret, + &lflags, from, fromlen, NULL, NULL); + } else { HANDLE evt; @@ -1127,7 +1132,7 @@ fhandler_socket::recvmsg (struct msghdr *msg, int flags, ssize_t tot) { do { - DWORD lflags = (DWORD) flags; + DWORD lflags = (DWORD) (flags & MSG_WINMASK); res = WSARecvFrom (get_socket (), wsabuf, iovcnt, &ret, &lflags, from, fromlen, NULL, NULL); } @@ -1271,7 +1276,7 @@ fhandler_socket::sendmsg (const struct msghdr *msg, int flags, ssize_t tot) 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 +1286,7 @@ fhandler_socket::sendmsg (const struct msghdr *msg, int flags, ssize_t tot) do { res = WSASendTo (get_socket (), wsabuf, iovcnt, - &ret, flags, + &ret, flags & MSG_WINMASK, (struct sockaddr *) msg->msg_name, msg->msg_namelen, NULL, NULL); } -- 2.11.0