* net.cc (cygwin_socket): Set SO_LINGER to small value so closed UNIX domain
sockets will not stay around. * select.cc (socket_cleanup): Set SO_LINGER to small value so closed dummy sockets do not stay around. Use correct value for second argument to shutdown.
This commit is contained in:
parent
e6b98fc8d6
commit
266be1d8c9
|
@ -1,3 +1,14 @@
|
|||
Sat Apr 14 18:04:35 2001 Christopher Faylor <cgf@cygnus.com>
|
||||
|
||||
* net.cc (cygwin_socket): Set SO_LINGER to small value so closed UNIX
|
||||
domain sockets will not stay around.
|
||||
|
||||
Sat Apr 14 18:01:43 2001 Pierre A. Humblet <Pierre.Humblet@ieee.org>
|
||||
|
||||
* select.cc (socket_cleanup): Set SO_LINGER to small value so closed
|
||||
dummy sockets do not stay around. Use correct value for second argument
|
||||
to shutdown.
|
||||
|
||||
Sat Apr 14 17:04:00 2001 Robert Collins <rbtcollins@hotmail.com>
|
||||
|
||||
* thread.h (MTinterface): Add threadcount.
|
||||
|
|
|
@ -363,7 +363,12 @@ cygwin_socket (int af, int type, int protocol)
|
|||
if (af == AF_INET)
|
||||
name = (type == SOCK_STREAM ? "/dev/tcp" : "/dev/udp");
|
||||
else
|
||||
name = (type == SOCK_STREAM ? "/dev/streamsocket" : "/dev/dgsocket");
|
||||
{
|
||||
name = (type == SOCK_STREAM ? "/dev/streamsocket" : "/dev/dgsocket");
|
||||
/* Set LINGER with 0 timeout for hard close */
|
||||
struct linger tmp = {1, 0}; /* On, 0 delay */
|
||||
(void) setsockopt (soc, SOL_SOCKET, SO_LINGER, (char *)&tmp, sizeof(tmp));
|
||||
}
|
||||
|
||||
fdsock (fd, name, soc)->set_addr_family (af);
|
||||
res = fd;
|
||||
|
|
|
@ -1329,6 +1329,11 @@ socket_cleanup (select_record *, select_stuff *stuff)
|
|||
{
|
||||
select_printf ("connection to si->exitsock %p", si->exitsock);
|
||||
SOCKET s = socket (AF_INET, SOCK_STREAM, 0);
|
||||
|
||||
/* Set LINGER with 0 timeout for hard close */
|
||||
struct linger tmp = {1, 0}; /* On, 0 delay */
|
||||
(void) setsockopt (s, SOL_SOCKET, SO_LINGER, (char *)&tmp, sizeof(tmp));
|
||||
|
||||
/* Connecting to si->exitsock will cause any executing select to wake
|
||||
up. When this happens then the exitsock condition will cause the
|
||||
thread to terminate. */
|
||||
|
@ -1338,12 +1343,12 @@ socket_cleanup (select_record *, select_stuff *stuff)
|
|||
select_printf ("connect failed");
|
||||
/* FIXME: now what? */
|
||||
}
|
||||
shutdown (s, 2);
|
||||
shutdown (s, SD_BOTH);
|
||||
closesocket (s);
|
||||
|
||||
/* Wait for thread to go away */
|
||||
WaitForSingleObject (si->thread, INFINITE);
|
||||
shutdown (si->exitsock, 2);
|
||||
shutdown (si->exitsock, SD_BOTH);
|
||||
closesocket (si->exitsock);
|
||||
CloseHandle (si->thread);
|
||||
stuff->device_specific[FHDEVN(FH_SOCKET)] = NULL;
|
||||
|
|
Loading…
Reference in New Issue