libt2n: (gerd) add client timeouts & tests, hello peek missing
[libt2n] / src / socket_server.cpp
index 38c2ea9..0eff676 100644 (file)
@@ -172,7 +172,16 @@ void socket_server::new_connection()
     return;
 }
 
-bool socket_server::fill_buffer(long long usec_timeout)
+/** @brief look for new connections and new data in any of the existing connections
+    @param usec_timeout wait until new data is found, max timeout usecs.
+            -1: wait endless
+            0: return instantly
+    @param usec_timeout_remaining if non-NULL the function will write the
+            not used time to the given target
+    @retval true if new data was found (does not mean that the received data 
+            is a complete packet though)
+*/
+bool socket_server::fill_buffer(long long usec_timeout,long long* usec_timeout_remaining)
 {
     fd_set used_fdset=connection_set;
 
@@ -193,6 +202,10 @@ bool socket_server::fill_buffer(long long usec_timeout)
 
     int ret=select (FD_SETSIZE, &used_fdset, NULL, NULL, timeout_ptr);
 
+    // return the timeout we did not use
+    if (usec_timeout > 0 && usec_timeout_remaining != NULL)
+        *usec_timeout_remaining=(tval.tv_sec*1000000)+tval.tv_usec;
+
     if (ret < 0)
     {
         if (errno == EINTR)