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>2010-03-22 13:47:53 +0300
committerCorinna Vinschen <corinna@vinschen.de>2010-03-22 13:47:53 +0300
commit65b4b495c64d75ed025bca5d46295de40a047aa2 (patch)
tree36a1af72a49183737f7f19a9e50d8694475c0aa4
parent0f6de51ae2581e950a1c19d7027f159445a64a30 (diff)
* 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.
-rw-r--r--winsup/cygwin/ChangeLog18
-rw-r--r--winsup/cygwin/fhandler.h2
-rw-r--r--winsup/cygwin/fhandler_socket.cc23
3 files changed, 31 insertions, 12 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 892255c45..1bd8cd86b 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,21 @@
+2010-03-22 Corinna Vinschen <corinna@vinschen.de>
+
+ * 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.
+
2010-03-19 Corinna Vinschen <corinna@vinschen.de>
* fhandler_disk_file.cc (fhandler_cygdrive::fstat): Add standard read
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index d1130d4ea..3d1b46bf4 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -432,7 +432,7 @@ class fhandler_socket: public fhandler_base
const HANDLE wsock_event () const { return wsock_evt; }
const LONG serial_number () const { return wsock_events->serial_number; }
private:
- int wait_for_events (const long event_mask, bool dontwait);
+ int wait_for_events (const long event_mask, const DWORD flags);
void release_events ();
pid_t sec_pid;
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)
{