34 #include <sys/types.h>
35 #include <sys/socket.h>
59 string err = (string)
"Already accepting connections, "
60 +
"no more sockets can be added" ;
77 string err(
"socket already connected, cannot listen" ) ;
82 string err(
"socket already listening" ) ;
95 struct timeval timeout ;
101 timeout.tv_sec = 120 ;
102 timeout.tv_usec = 0 ;
104 FD_ZERO( &read_fd ) ;
107 Socket_citer iter = _socket_list.begin() ;
108 for( ; iter != _socket_list.end(); iter++ )
110 Socket *s_ptr = (*iter).second ;
112 if( s > maxfd ) maxfd = s ;
113 FD_SET( s, &read_fd ) ;
116 if( select( maxfd+1, &read_fd,
117 (fd_set*)NULL, (fd_set*)NULL, &timeout) < 0 )
119 string err(
"selecting sockets " ) ;
120 const char *error_info = strerror( errno ) ;
122 err +=
" " + (string)error_info ;
126 iter = _socket_list.begin() ;
127 for( ; iter != _socket_list.end(); iter++ )
129 Socket *s_ptr = (*iter).second ;
131 if ( FD_ISSET( s, &read_fd ) )
133 struct sockaddr from ;
134 int len_from =
sizeof( from ) ;
135 #ifdef _ACCEPT_USES_SOCKLEN_T
136 msgsock =
::accept( s, (
struct sockaddr *)&from,
137 (socklen_t *)&len_from ) ;
139 msgsock =
::accept( s, (
struct sockaddr *)&from,
142 return s_ptr->
newSocket( msgsock, (
struct sockaddr *)&from );
159 << (
void *)
this <<
")" << endl ;
161 if( _socket_list.size() )
164 Socket_citer i = _socket_list.begin() ;
165 Socket_citer ie = _socket_list.end() ;
166 for( ; i != ie; i++ )
169 Socket *s_ptr = (*i).second ;
170 s_ptr->
dump( strm ) ;