Revert code reversion from 2004-04-03. So, revert to async I/O again.
* fhandler.h (status): Add "closed" flag. (prepare): New method declaration. (wait): Ditto. (release): Ditto. * fhandler_socket.cc: Don't include wsock_event.h. (fhandler_socket::prepare): New method, moved from wsock_event. (fhandler_socket::wait): Ditto. (fhandler_socket::release): New method. (fhandler_socket::recvfrom): Simplify loop. (fhandler_socket::recvmsg): Ditto. (fhandler_socket::sendto): Ditto. (fhandler_socket::sendmsg): Ditto. * net.cc: Don't include wsock_event.h. (wsock_event::prepare): Remove. (wsock_event::wait): Ditto. * wsock_event.h: Remove.
This commit is contained in:
@@ -35,7 +35,6 @@ details. */
|
||||
#include "sigproc.h"
|
||||
#include "pinfo.h"
|
||||
#include "registry.h"
|
||||
#include "wsock_event.h"
|
||||
#include "cygtls.h"
|
||||
|
||||
extern "C"
|
||||
@@ -50,61 +49,6 @@ extern "C"
|
||||
int sscanf (const char *, const char *, ...);
|
||||
} /* End of "C" section */
|
||||
|
||||
LPWSAOVERLAPPED
|
||||
wsock_event::prepare ()
|
||||
{
|
||||
LPWSAOVERLAPPED ret = NULL;
|
||||
|
||||
SetLastError (0);
|
||||
if ((event = WSACreateEvent ()) != WSA_INVALID_EVENT)
|
||||
{
|
||||
memset (&ovr, 0, sizeof ovr);
|
||||
ovr.hEvent = event;
|
||||
ret = &ovr;
|
||||
}
|
||||
else if (GetLastError () == ERROR_PROC_NOT_FOUND) /* winsock2 not available */
|
||||
WSASetLastError (0);
|
||||
|
||||
debug_printf ("%d = wsock_event::prepare ()", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
wsock_event::wait (int socket, LPDWORD flags)
|
||||
{
|
||||
int ret = SOCKET_ERROR;
|
||||
WSAEVENT ev[2] = { event, signal_arrived };
|
||||
DWORD len;
|
||||
|
||||
switch (WSAWaitForMultipleEvents (2, ev, FALSE, WSA_INFINITE, FALSE))
|
||||
{
|
||||
case WSA_WAIT_EVENT_0:
|
||||
if (WSAGetOverlappedResult (socket, &ovr, &len, FALSE, flags))
|
||||
ret = (int) len;
|
||||
break;
|
||||
case WSA_WAIT_EVENT_0 + 1:
|
||||
if (!CancelIo ((HANDLE) socket))
|
||||
{
|
||||
debug_printf ("CancelIo() %E, fallback to blocking io");
|
||||
WSAGetOverlappedResult (socket, &ovr, &len, TRUE, flags);
|
||||
}
|
||||
else if (WSAGetOverlappedResult (socket, &ovr, &len, FALSE, flags)
|
||||
&& len > 0)
|
||||
ret = (int) len;
|
||||
else
|
||||
WSASetLastError (WSAEINTR);
|
||||
break;
|
||||
case WSA_WAIT_FAILED:
|
||||
break;
|
||||
default: /* Should be impossible. *LOL* */
|
||||
WSASetLastError (WSAEFAULT);
|
||||
break;
|
||||
}
|
||||
WSACloseEvent (event);
|
||||
event = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
WSADATA wsadata;
|
||||
|
||||
static fhandler_socket *
|
||||
|
Reference in New Issue
Block a user