Replace socket_handler::fill_buffer() recursion with loop (#8389)
[libt2n] / src / socket_server.cpp
index 35bb314..d6ca439 100644 (file)
@@ -28,6 +28,7 @@ on this file might be covered by the GNU General Public License.
 #include <sys/socket.h>
 #include <sys/un.h>
 #include <sys/time.h>
+#include <sys/stat.h>
 #include <arpa/inet.h>
 #include <netinet/in.h>
 #include <netdb.h>
@@ -164,6 +165,7 @@ void socket_server::start_listening()
     /* clear & insert server sock into the fd_tab to prepare select */
     FD_ZERO(&connection_set);
     FD_SET (sock, &connection_set);
+    sockets_set.insert(sock);
 }
 
 /// handle a new connection from a client
@@ -189,6 +191,7 @@ void socket_server::new_connection()
     }
 
     FD_SET (newsock, &connection_set);
+    sockets_set.insert(newsock);
 
     socket_server_connection *nc=new socket_server_connection(newsock, get_type(), get_default_timeout());
     nc->set_socket_options(newsock);
@@ -286,6 +289,7 @@ bool socket_server::fill_connection_buffers()
 void socket_server::remove_connection_socket(int sock)
 {
     FD_CLR(sock, &connection_set);
+    sockets_set.erase(sock);
 }
 
 /**
@@ -320,4 +324,11 @@ void socket_server_connection::close()
     }
 }
 
+bool socket_server_connection::fill_buffer(long long usec_timeout,long long* usec_timeout_remaining)
+{
+    bool new_data = socket_handler::fill_buffer(buffer,usec_timeout,usec_timeout_remaining);
+    if (new_data)
+        reset_timeout();
+    return new_data;
+}
 }