34 #include <sys/types.h>
35 #include <sys/socket.h>
41 #ifdef _ACCEPT_USES_SOCKLEN_T
42 #define SOCK_TYPE socklen_t
67 string err = (string)
"Already accepting connections, "
68 +
"no more sockets can be added" ;
85 string err(
"socket already connected, cannot listen" ) ;
90 string err(
"socket already listening" ) ;
103 struct timeval timeout ;
109 timeout.tv_sec = 120 ;
110 timeout.tv_usec = 0 ;
112 FD_ZERO( &read_fd ) ;
115 Socket_citer iter = _socket_list.begin() ;
116 for( ; iter != _socket_list.end(); iter++ )
118 Socket *s_ptr = (*iter).second ;
120 if( s > maxfd ) maxfd = s ;
121 FD_SET( s, &read_fd ) ;
129 while (select(maxfd + 1, &read_fd, (fd_set*) NULL, (fd_set*) NULL, &timeout) < 0) {
137 string err(
"select: ");
138 const char *error_info = strerror(errno);
140 err += (string) error_info;
146 iter = _socket_list.begin() ;
147 for( ; iter != _socket_list.end(); iter++ )
149 Socket *s_ptr = (*iter).second ;
151 if ( FD_ISSET( s, &read_fd ) )
153 struct sockaddr from ;
154 socklen_t len_from =
sizeof( from ) ;
156 while ((msgsock = ::
accept(s, &from, &len_from)) < 0) {
157 if (errno == EINTR) {
161 string err(
"accept: ");
162 const char *error_info = strerror(errno);
164 err += (string) error_info;
169 return s_ptr->
newSocket( msgsock, (
struct sockaddr *)&from ) ;
187 << (
void *)
this <<
")" << endl ;
189 if( _socket_list.size() )
192 Socket_citer i = _socket_list.begin() ;
193 Socket_citer ie = _socket_list.end() ;
194 for( ; i != ie; i++ )
197 Socket *s_ptr = (*i).second ;
198 s_ptr->
dump( strm ) ;