diff options
author | fcolin | 1998-10-20 11:31:53 +0000 |
---|---|---|
committer | fcolin | 1998-10-20 11:31:53 +0000 |
commit | 7fcf45c6fd0ff697ab614e17cc79a9cce0ec56b0 (patch) | |
tree | 3bf304a300f3d7b6a20b34db5795b043d0d3074b /src/ivysocket.c | |
parent | e54cc4c102de2899701122ea264e9d5116275507 (diff) | |
download | ivy-c-7fcf45c6fd0ff697ab614e17cc79a9cce0ec56b0.zip ivy-c-7fcf45c6fd0ff697ab614e17cc79a9cce0ec56b0.tar.gz ivy-c-7fcf45c6fd0ff697ab614e17cc79a9cce0ec56b0.tar.bz2 ivy-c-7fcf45c6fd0ff697ab614e17cc79a9cce0ec56b0.tar.xz |
correction bus buscleanup et fermeture bus
Diffstat (limited to 'src/ivysocket.c')
-rw-r--r-- | src/ivysocket.c | 23 |
1 files changed, 18 insertions, 5 deletions
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; |