From 7fcf45c6fd0ff697ab614e17cc79a9cce0ec56b0 Mon Sep 17 00:00:00 2001 From: fcolin Date: Tue, 20 Oct 1998 11:31:53 +0000 Subject: correction bus buscleanup et fermeture bus --- src/ivysocket.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'src/ivysocket.c') diff --git a/src/ivysocket.c b/src/ivysocket.c index 04e44bf..131813d 100644 --- a/src/ivysocket.c +++ b/src/ivysocket.c @@ -31,12 +31,11 @@ static ChannelClose channel_close = NULL; #define MAX_BUFFER 2048 - -typedef struct _server *Server; - struct _server { Server next; + HANDLE fd; Channel channel; + unsigned short port; void *(*create)(Client client); void (*handle_delete)(Client client, void *data); SocketInterpretation interpretation; @@ -173,7 +172,7 @@ static void HandleServer(Channel channel, HANDLE fd, void *data) client->data = (*server->create)( client ); } -int SocketServer(unsigned short port, +Server SocketServer(unsigned short port, void*(*create)(Client client), void(*handle_delete)(Client client, void *data), void(*interpretation)( Client client, void *data, char *ligne)) @@ -235,12 +234,26 @@ int SocketServer(unsigned short port, fprintf(stderr,"NOK Memory Alloc Error\n"); exit(0); } + server->fd = fd; server->channel = (*channel_setup)( fd, server, DeleteSocket, HandleServer ); server->create = create; server->handle_delete = handle_delete; server->interpretation = interpretation; - return ntohs(local.sin_port); + server->port = ntohs(local.sin_port); + return server; } +unsigned short SocketServerGetPort( Server server ) +{ + return server->port; +} +void SocketServerClose( Server server ) +{ + (*channel_close)( server->channel ); + shutdown( server->fd, 2 ); + close( server->fd ); + LIST_REMOVE( servers_list, server ); +} + char *SocketGetPeerHost( Client client ) { int err; -- cgit v1.1