added Makefile
[TransparentIRC.git] / src / ServerSocket.c
index 0bdec2caf8290da6648a4e9ce09b7ddd56e4462a..b09e36c2a4b5386b7cbfd97d88ee886efdee342c 100644 (file)
@@ -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;
     }
 }