X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2FServerSocket.c;h=e2af54e8d0ba10f97c46c29f4bbcf4a8d066c7fe;hb=HEAD;hp=0bdec2caf8290da6648a4e9ce09b7ddd56e4462a;hpb=0e2ac9360b71a7d054d7e945be575c0d21fa880c;p=TransparentIRC.git diff --git a/src/ServerSocket.c b/src/ServerSocket.c index 0bdec2c..e2af54e 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) { @@ -44,13 +47,11 @@ static void serversocket_delete(struct ServerSocket *server) { free(server); } -struct ServerSocket *serversocket_listen(char *hostname, int port) { +struct ServerSocket *serversocket_listen(char *hostname, int port, int ssl) { 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; } }