Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2005-12-08 13:13:57 +0300
committerCorinna Vinschen <corinna@vinschen.de>2005-12-08 13:13:57 +0300
commitddd62ccbd4e10b481ee67b54548765f045fddc80 (patch)
tree914dc6b33ea510eba5eb4ddfce1cb5afb981dd2b /winsup/cygwin/fhandler_socket.cc
parent6c9a5ebbfcb3de5c66e83aae630a6a44124ad372 (diff)
* fhandler_socket.cc (fhandler_socket::recvfrom): Mask flags with
MSG_WINMASK for Windows socket calls. (fhandler_socket::recvmsg): Ditto. (fhandler_socket::sendmsg): Ditto.
Diffstat (limited to 'winsup/cygwin/fhandler_socket.cc')
-rw-r--r--winsup/cygwin/fhandler_socket.cc23
1 files changed, 14 insertions, 9 deletions
diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc
index ec772ff49..57e743afb 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);
}