X-Git-Url: http://git.pk910.de/?p=TransparentIRC.git;a=blobdiff_plain;f=src%2FServerSocket.c;fp=src%2FServerSocket.c;h=b09e36c2a4b5386b7cbfd97d88ee886efdee342c;hp=0bdec2caf8290da6648a4e9ce09b7ddd56e4462a;hb=1f2baa2e7b90ea83c5a0c93598e22e5063fc6d95;hpb=0e2ac9360b71a7d054d7e945be575c0d21fa880c diff --git a/src/ServerSocket.c b/src/ServerSocket.c index 0bdec2c..b09e36c 100644 --- a/src/ServerSocket.c +++ b/src/ServerSocket.c @@ -25,13 +25,16 @@ static void serversocket_callback(struct IOEvent *event); static struct ServerSocket *serversocket_create(struct IODescriptor *iofd) { struct ServerSocket *sock = malloc(sizeof(*sock)); sock->iofd = iofd; + iofd->data = sock; sock->clientcount = 0; //add ServerSocket to the list sock->prev = NULL; sock->next = serversockets; - serversockets->prev = sock; + if(serversockets) + serversockets->prev = sock; serversockets = sock; + return sock; } static void serversocket_delete(struct ServerSocket *server) { @@ -46,11 +49,9 @@ static void serversocket_delete(struct ServerSocket *server) { struct ServerSocket *serversocket_listen(char *hostname, int port) { struct IODescriptor *iofd = iohandler_listen(hostname, port, serversocket_callback); - if(iofd) { - struct ServerSocket *server = serversocket_create(iofd); - return server; - } - return NULL; + if(!iofd) return NULL; + struct ServerSocket *server = serversocket_create(iofd); + return server; } void serversocket_close(struct ServerSocket *server, int keep_clients) { @@ -60,15 +61,12 @@ void serversocket_close(struct ServerSocket *server, int keep_clients) { } static void serversocket_callback(struct IOEvent *event) { + struct ServerSocket *server = event->iofd->data; switch(event->type) { case IOEVENT_ACCEPT: - struct ServerSocket *server = NULL; - for(server = serversockets; server; server = server->next) { - if(server->iofd == event->iofd) - break; - } - if(server) - userclient_accepted(server, event->accept_fd) + userclient_accepted(server, event->data.accept_fd); + break; + default: break; } }