crossroads

Git mirror of https://crossroads.e-tunity.com/
git clone git://git.finwo.net/app/crossroads
Log | Files | Refs | LICENSE

accept.cc (746B)


      1 #include "basesocket"
      2 
      3 Basesocket *Basesocket::accept() {
      4     int f;
      5 
      6     int size;
      7     struct sockaddr_in claddr;
      8 
      9     debugmsg("About to accept client on server socket " << _fd << '\n');
     10     size = sizeof(claddr);
     11     if ( (f = ::accept(_fd, (struct sockaddr *)&claddr,
     12 		       (socklen_t *)&size)) >= 0 ) {
     13 	Basesocket *ret = new Basesocket(f);
     14 	ret->_clientaddr = claddr;
     15 	debugmsg("Client " << inet2string(ret->_clientaddr.sin_addr) <<
     16 		 " accepted as basesocket " << f << '\n');
     17 	return ret;
     18     }
     19 
     20     if (EMFILE_SLEEP && errno == EMFILE) {
     21 	warnmsg("Out of file descriptors while accepting network "
     22 		"connection, taking a short nap\n");
     23 	sleep(1);
     24     }
     25     throw Error(string("Failed to accept client: ") +
     26 		strerror(errno));
     27 }
     28 	
     29