* 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.
This commit is contained in:
parent
0f6de51ae2
commit
65b4b495c6
winsup/cygwin
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user