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