summaryrefslogtreecommitdiff
path: root/src/ivysocket.c
diff options
context:
space:
mode:
authorfcolin1999-03-26 15:50:13 +0000
committerfcolin1999-03-26 15:50:13 +0000
commit62f392c51cecf41ccbc9b9bbcd8c12700f7b744a (patch)
tree0cfaff31a0748c6fe8b9f31c17093e3c6385fc78 /src/ivysocket.c
parent03a0143c0c6b55a97e910f229945620e81a756cb (diff)
downloadivy-c-62f392c51cecf41ccbc9b9bbcd8c12700f7b744a.zip
ivy-c-62f392c51cecf41ccbc9b9bbcd8c12700f7b744a.tar.gz
ivy-c-62f392c51cecf41ccbc9b9bbcd8c12700f7b744a.tar.bz2
ivy-c-62f392c51cecf41ccbc9b9bbcd8c12700f7b744a.tar.xz
correction d'un bug a la fermeture de Ivy
:wq
Diffstat (limited to 'src/ivysocket.c')
-rw-r--r--src/ivysocket.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/ivysocket.c b/src/ivysocket.c
index 4a06a5a..b2ba200 100644
--- a/src/ivysocket.c
+++ b/src/ivysocket.c
@@ -99,6 +99,17 @@ static void DeleteSocket(void *data)
LIST_REMOVE (clients_list, client );
}
+static void DeleteServerSocket(void *data)
+{
+ Server server = (Server )data;
+#ifdef BUGGY_END
+ if (server->handle_delete )
+ (*server->handle_delete) (server, NULL );
+#endif
+ shutdown (server->fd, 2 );
+ close (server->fd );
+ LIST_REMOVE (servers_list, server);
+}
static void HandleSocket (Channel channel, HANDLE fd, void *data)
{
Client client = (Client)data;
@@ -243,7 +254,7 @@ Server SocketServer(unsigned short port,
exit(0);
}
server->fd = fd;
- server->channel = (*channel_setup) (fd, server, DeleteSocket, HandleServer );
+ server->channel = (*channel_setup) (fd, server, DeleteServerSocket, HandleServer );
server->create = create;
server->handle_delete = handle_delete;
server->interpretation = interpretation;
@@ -263,9 +274,6 @@ void SocketServerClose (Server server )
if (!server)
return;
(*channel_close) (server->channel );
- shutdown (server->fd, 2 );
- close (server->fd );
- LIST_REMOVE (servers_list, server );
}
char *SocketGetPeerHost (Client client )
@@ -513,7 +521,7 @@ Client SocketBroadcastCreate (unsigned short port,
};
#ifdef SO_REUSEPORT
- if (setsockopt (fd, SOL_SOCKET, SO_REUSEPORT, (char *)&on, sizeof (on)) < 0)
+ if (setsockopt (handle, SOL_SOCKET, SO_REUSEPORT, (char *)&on, sizeof (on)) < 0)
{
perror ("*** set socket option REUSEPORT ***");
return NULL;