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>2004-04-01 21:00:21 +0400
committerCorinna Vinschen <corinna@vinschen.de>2004-04-01 21:00:21 +0400
commitb6edea61f22b95a1832b953ddbae29c28cc982e9 (patch)
tree95c3c603a157d5813b2268e21eb18e116eacd68a /winsup/cygwin/fhandler_socket.cc
parent4cfacffa795c41e117a02c21741a0868168f3a10 (diff)
* fhandler_socket.cc (fhandler_socket::recvfrom): Rearrange loop
so that WSARecvFrom is always called before waiting. (fhandler_socket::recvmsg): Ditto.
Diffstat (limited to 'winsup/cygwin/fhandler_socket.cc')
-rw-r--r--winsup/cygwin/fhandler_socket.cc24
1 files changed, 13 insertions, 11 deletions
diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc
index 878880da0..7f028ba0b 100644
--- a/winsup/cygwin/fhandler_socket.cc
+++ b/winsup/cygwin/fhandler_socket.cc
@@ -737,14 +737,15 @@ fhandler_socket::recvfrom (void *ptr, size_t len, int flags,
{
do
{
- if (!(res = wsock_evt.wait (get_socket (), has_been_closed)))
- res = WSARecvFrom (get_socket (), &wsabuf, 1,
- (ret = 0, &ret), (DWORD *) &flags,
- from, fromlen, NULL, NULL);
+ res = WSARecvFrom (get_socket (), &wsabuf, 1,
+ (ret = 0, &ret), (DWORD *) &flags,
+ from, fromlen, NULL, NULL);
}
while (res == SOCKET_ERROR
&& WSAGetLastError () == WSAEWOULDBLOCK
- && !has_been_closed);
+ && !has_been_closed
+ && !(res = wsock_evt.wait (get_socket (),
+ has_been_closed)));
wsock_evt.release (get_socket ());
}
}
@@ -863,14 +864,15 @@ fhandler_socket::recvmsg (struct msghdr *msg, int flags, ssize_t tot)
{
do
{
- if (!(res = wsock_evt.wait (get_socket (), has_been_closed)))
- res = WSARecvFrom (get_socket (), wsabuf, iovcnt,
- (ret = 0, &ret), (DWORD *) &flags,
- from, fromlen, NULL, NULL);
+ res = WSARecvFrom (get_socket (), wsabuf, iovcnt,
+ (ret = 0, &ret), (DWORD *) &flags,
+ from, fromlen, NULL, NULL);
}
while (res == SOCKET_ERROR
- && WSAGetLastError () == WSAEWOULDBLOCK
- && !has_been_closed);
+ && WSAGetLastError () == WSAEWOULDBLOCK
+ && !has_been_closed
+ && !(res = wsock_evt.wait (get_socket (),
+ has_been_closed)));
wsock_evt.release (get_socket ());
}
}