Example #1
0
void *server_thread(void *par) {
   if (opt.debug_log) {
      _log("[Notice] server_thread: Starting...");
   }
   pthread_t th;
   char *c = NULL, *p = NULL, *v = NULL;

   int gsin_len;
   unsigned int i, r, b, max;
   unsigned long mode = 1;
   int error = 0;
   struct pollfd fds;

   SOCKET gsock, ssock;
   struct sockaddr_in gsin, ssin;
   memset(&ssin, 0, sizeof (ssin));
   ssin.sin_family = AF_INET;
   ssin.sin_port = htons(opt.server_port);
   ssin.sin_addr.s_addr = INADDR_ANY;



   if ((ssock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
      _log("[Error] server_thread: socket()");
      close(ssock);
      return 0;
   }

   int optval = 1;
   setsockopt(ssock, SOL_SOCKET, SO_REUSEADDR, (char *) &optval, sizeof (int));

   if (bind(ssock, (struct sockaddr*) & ssin, sizeof (ssin)) == SOCKET_ERROR) {
      _log("[Error] server_thread: bind()");
      close(ssock);
      return 0;
   }

   if (listen(ssock, SOMAXCONN) == SOCKET_ERROR) {
      _log("[Error] server_thread: listen()");
      close(ssock);
      return 0;
   }

   if (ioctl(ssock, FIONBIO, &mode) == SOCKET_ERROR) {
      _log("[Error] server_thread: ioctlsocket()");
      close(ssock);
      return 0;
   }

   if (opt.debug_log) {
      _log("[Notice] server_thread: New connection request");
   }

   fds.fd = ssock;
   fds.events = POLLIN;

   //	CONNECTION con={0};
   for (;;) {
      for (;;) {

         error = mypoll(&fds, 1, 2000);

         if (error >= 1) break;
         if (error == 0) continue;
         if (errno != EAGAIN && errno != EINTR) {
            //sprintf((char *)buf, "poll(): %s/%d", strerror(errno), errno);
            //if(!srv.silent)(*srv.logfunc)(&defparam, buf);
            break;
         }
         continue;
      }

      if (error < 0)
         break;

      gsin_len = sizeof (gsin);

      if ((gsock = accept(ssock, (struct sockaddr*) & gsin, (socklen_t*) & gsin_len)) == INVALID_SOCKET)
         continue;
      else {
         struct sockaddr_in adr;
         int len = sizeof (struct sockaddr);
         getpeername(gsock, (struct sockaddr*) & adr, (socklen_t*) & len);
         unsigned long u = adr.sin_addr.s_addr;

         if (opt.debug_log) {
            _log("[Notice] server_thread: Connection from %d.%d.%d.%d(%u), SOCKET: %u",
                    (u) & 0x000000ff,
                    (u >> 8) & 0x000000ff,
                    (u >> 16) & 0x000000ff,
                    (u >> 24) & 0x000000ff, u, gsock);
         }

         ioctl(gsock, FIONBIO, &mode);
         client_add(u, gsock);
      }
   }
Example #2
0
int main()
{
	mypoll();
	return 0;
}