* fhandler_socket.cc (fhandler_socket::connect): Simplify previous

patch.
	(fhandler_socket::accept): Ditto.
This commit is contained in:
Corinna Vinschen 2003-06-02 21:14:39 +00:00
parent 8e13bd144d
commit dfe7d28850
2 changed files with 16 additions and 28 deletions

View File

@ -1,3 +1,9 @@
2003-06-02 Corinna Vinschen <corinna@vinschen.de>
* fhandler_socket.cc (fhandler_socket::connect): Simplify previous
patch.
(fhandler_socket::accept): Ditto.
2003-06-02 Corinna Vinschen <corinna@vinschen.de> 2003-06-02 Corinna Vinschen <corinna@vinschen.de>
* fhandler_socket.cc: Include cygthread.h. * fhandler_socket.cc: Include cygthread.h.

View File

@ -534,21 +534,11 @@ fhandler_socket::connect (const struct sockaddr *name, int namelen)
{ {
sock_thread_data cd = { get_socket (), (sockaddr *) &sin, &namelen, -1 }; sock_thread_data cd = { get_socket (), (sockaddr *) &sin, &namelen, -1 };
cygthread *thread = new cygthread (connect_thread, &cd, "connect"); cygthread *thread = new cygthread (connect_thread, &cd, "connect");
HANDLE wait_events[2] = { *thread, signal_arrived }; HANDLE waitevt = CreateEvent(&sec_none_nih, FALSE, TRUE, NULL);
if (WaitForMultipleObjects(2, wait_events, FALSE, INFINITE) interrupted = thread->detach (waitevt);
!= WAIT_OBJECT_0) CloseHandle (waitevt);
{ if (!interrupted)
/* Signal arrived */ res = cd.ret;
thread->terminate_thread ();
interrupted = TRUE;
}
else
{
/* connect returned normally */
res = cd.ret;
thread->detach ();
}
delete thread;
} }
else else
res = ::connect (get_socket (), (sockaddr *) &sin, namelen); res = ::connect (get_socket (), (sockaddr *) &sin, namelen);
@ -652,20 +642,12 @@ fhandler_socket::accept (struct sockaddr *peer, int *len)
{ {
sock_thread_data ad = { get_socket (), peer, len, -1 }; sock_thread_data ad = { get_socket (), peer, len, -1 };
cygthread *thread = new cygthread (accept_thread, &ad, "accept"); cygthread *thread = new cygthread (accept_thread, &ad, "accept");
HANDLE wait_events[2] = { *thread, signal_arrived }; HANDLE waitevt = CreateEvent(&sec_none_nih, FALSE, TRUE, NULL);
if (WaitForMultipleObjects(2, wait_events, FALSE, INFINITE) bool signalled = thread->detach (waitevt);
!= WAIT_OBJECT_0) CloseHandle (waitevt);
{ if (signalled)
/* Signal arrived */ return -1;
thread->terminate_thread ();
delete thread;
set_errno (EINTR);
return -1;
}
/* accept returned normally */
res = ad.ret; res = ad.ret;
thread->detach ();
delete thread;
} }
else else
res = ::accept (get_socket (), peer, len); res = ::accept (get_socket (), peer, len);