diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2010-03-22 10:47:53 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2010-03-22 10:47:53 +0000 |
commit | 65b4b495c64d75ed025bca5d46295de40a047aa2 (patch) | |
tree | 36a1af72a49183737f7f19a9e50d8694475c0aa4 /winsup/cygwin/fhandler_socket.cc | |
parent | 0f6de51ae2581e950a1c19d7027f159445a64a30 (diff) | |
download | cygnal-65b4b495c64d75ed025bca5d46295de40a047aa2.tar.gz cygnal-65b4b495c64d75ed025bca5d46295de40a047aa2.tar.bz2 cygnal-65b4b495c64d75ed025bca5d46295de40a047aa2.zip |
* fhandler_socket.cc (fhandler_socket::evaluate_events): Make erase
const in parameter list.
(fhandler_socket::wait_for_events): Take a DWORD flags value instead of
just a bool. Call evaluate_events with erase flag according to
MSG_PEEK value in flags. Replace check for dontwait with check for
MSG_DONTWAIT in flags.
(fhandler_socket::connect): Call wait_for_events with 0 flags value.
(fhandler_socket::accept4): Ditto.
(fhandler_socket::recv_internal): Save flags in wait_flags. Drop
dontwait variable. Call wait_for_events with wait_flags.
(fhandler_socket::send_internal): Save MSG_DONTWAIT flag in wait_flags
and call wait_for_events with wait_flags as argument. Drop dontwait
variable.
* fhandler.h (class fhandler_socket): Change second parameter in
declaration of wait_for_events to const DWORD.
Diffstat (limited to 'winsup/cygwin/fhandler_socket.cc')
-rw-r--r-- | winsup/cygwin/fhandler_socket.cc | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc index 6f6ab31d2..2a03ce6cd 100644 --- a/winsup/cygwin/fhandler_socket.cc +++ b/winsup/cygwin/fhandler_socket.cc @@ -540,7 +540,7 @@ fhandler_socket::init_events () int fhandler_socket::evaluate_events (const long event_mask, long &events, - bool erase) + const bool erase) { int ret = 0; long events_now = 0; @@ -587,7 +587,7 @@ fhandler_socket::evaluate_events (const long event_mask, long &events, } int -fhandler_socket::wait_for_events (const long event_mask, bool dontwait) +fhandler_socket::wait_for_events (const long event_mask, const DWORD flags) { if (async_io ()) return 0; @@ -595,9 +595,10 @@ fhandler_socket::wait_for_events (const long event_mask, bool dontwait) int ret; long events; - while (!(ret = evaluate_events (event_mask, events, true)) && !events) + while (!(ret = evaluate_events (event_mask, events, !(flags & MSG_PEEK))) + && !events) { - if (is_nonblocking () || dontwait) + if (is_nonblocking () || (flags & MSG_DONTWAIT)) { WSASetLastError (WSAEWOULDBLOCK); return SOCKET_ERROR; @@ -1100,7 +1101,7 @@ fhandler_socket::connect (const struct sockaddr *name, int namelen) if (!is_nonblocking () && res == SOCKET_ERROR && WSAGetLastError () == WSAEWOULDBLOCK) - res = wait_for_events (FD_CONNECT | FD_CLOSE, false); + res = wait_for_events (FD_CONNECT | FD_CLOSE, 0); if (!res) err = 0; @@ -1201,7 +1202,7 @@ fhandler_socket::accept4 (struct sockaddr *peer, int *len, int flags) int llen = sizeof (struct sockaddr_storage); int res = 0; - while (!(res = wait_for_events (FD_ACCEPT | FD_CLOSE, false)) + while (!(res = wait_for_events (FD_ACCEPT | FD_CLOSE, 0)) && (res = ::accept (get_socket (), (struct sockaddr *) &lpeer, &llen)) == SOCKET_ERROR && WSAGetLastError () == WSAEWOULDBLOCK) @@ -1424,8 +1425,8 @@ fhandler_socket::recv_internal (LPWSAMSG wsamsg) bool use_recvmsg = false; static NO_COPY LPFN_WSARECVMSG WSARecvMsg; - bool waitall = !!(wsamsg->dwFlags & MSG_WAITALL); - bool dontwait = !!(wsamsg->dwFlags & MSG_DONTWAIT); + DWORD wait_flags = wsamsg->dwFlags; + bool waitall = !!(wait_flags & MSG_WAITALL); wsamsg->dwFlags &= (MSG_OOB | MSG_PEEK | MSG_DONTROUTE); if (wsamsg->Control.len > 0) { @@ -1452,7 +1453,7 @@ fhandler_socket::recv_internal (LPWSAMSG wsamsg) /* Note: Don't call WSARecvFrom(MSG_PEEK) without actually having data waiting in the buffers, otherwise the event handling gets messed up for some reason. */ - while (!(res = wait_for_events (evt_mask | FD_CLOSE, dontwait)) + while (!(res = wait_for_events (evt_mask | FD_CLOSE, wait_flags)) || saw_shutdown_read ()) { if (use_recvmsg) @@ -1609,7 +1610,7 @@ fhandler_socket::send_internal (struct _WSAMSG *wsamsg, int flags) DWORD ret = 0, err = 0, sum = 0, off = 0; WSABUF buf; bool use_sendmsg = false; - bool dontwait = !!(flags & MSG_DONTWAIT); + DWORD wait_flags = flags & MSG_DONTWAIT; bool nosignal = !(flags & MSG_NOSIGNAL); flags &= (MSG_OOB | MSG_DONTROUTE); @@ -1649,7 +1650,7 @@ fhandler_socket::send_internal (struct _WSAMSG *wsamsg, int flags) } } while (res && err == WSAEWOULDBLOCK - && !(res = wait_for_events (FD_WRITE | FD_CLOSE, dontwait))); + && !(res = wait_for_events (FD_WRITE | FD_CLOSE, wait_flags))); if (!res) { |