]> jfr.im git - irc/quakenet/newserv.git/blobdiff - nickrate/nickrate.c
Merge pull request #1 from meeb/meeb
[irc/quakenet/newserv.git] / nickrate / nickrate.c
index da6afade82896b8342449616e159e20af7e51de6..6da2f43cca9eebb314ebe5d0ae329bcd576c8e6f 100644 (file)
 #include <sys/ioctl.h>
 #include <unistd.h>
 #include <netinet/in.h>
+#include <string.h>
+#include "../lib/version.h"
+
+MODULE_VERSION("")
 
 unsigned int nicks;
 unsigned int quits;
-int listenfd;
+int nickrate_listenfd;
 
 void nr_nick(int hooknum, void *arg);
 void nr_handlelistensocket(int fd, short events);
@@ -28,9 +32,9 @@ void _init() {
   registerhook(HOOK_NICK_NEWNICK, &nr_nick);
   registerhook(HOOK_NICK_LOSTNICK, &nr_nick);
 
-  listenfd=nr_openlistensocket(6002);
-  if (listenfd>0) {
-    registerhandler(listenfd,POLLIN,&nr_handlelistensocket);
+  nickrate_listenfd=nr_openlistensocket(6002);
+  if (nickrate_listenfd>0) {
+    registerhandler(nickrate_listenfd,POLLIN,&nr_handlelistensocket);
   }
           
 }
@@ -38,7 +42,7 @@ void _init() {
 void _fini() {
   deregisterhook(HOOK_NICK_NEWNICK, &nr_nick);
   deregisterhook(HOOK_NICK_LOSTNICK, &nr_nick);
-  deregisterhandler(listenfd,1);    
+  deregisterhandler(nickrate_listenfd,1);    
 }
 
 void nr_nick(int hooknum, void *arg) {
@@ -64,6 +68,7 @@ int nr_openlistensocket(int portnum) {
   }
   
   if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (const char *) &opt, sizeof(opt))!=0) {
+    close(fd);
     Error("proxyscan",ERR_ERROR,"Unable to set SO_REUSEADDR on listen socket.");
     return -1;
   }
@@ -74,6 +79,7 @@ int nr_openlistensocket(int portnum) {
   sin.sin_port=htons(portnum);
   
   if (bind(fd, (struct sockaddr *) &sin, sizeof(sin))) {
+    close(fd);
     Error("proxyscan",ERR_ERROR,"Unable to bind listen socket (%d).",errno);
     return -1;
   }
@@ -81,6 +87,7 @@ int nr_openlistensocket(int portnum) {
   listen(fd,5);
   
   if (ioctl(fd, FIONBIO, &opt)!=0) {
+    close(fd);
     Error("proxyscan",ERR_ERROR,"Unable to set listen socket non-blocking.");
     return -1;
   }
@@ -97,7 +104,7 @@ void nr_handlelistensocket(int fd, short events) {
   socklen_t addrsize=sizeof(sin);
   char buf[20];
   int newfd;
-  if ((newfd=accept(fd, (struct sockaddr *)&sin, &addrsize))>0) {
+  if ((newfd=accept(fd, (struct sockaddr *)&sin, &addrsize))>-1) {
     /* Got new connection */
     sprintf(buf,"%u\n",nicks);
     write(newfd,buf,strlen(buf));