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) {
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) {
}
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;
}
}