X-Git-Url: http://developer.intra2net.com/git/?p=libt2n;a=blobdiff_plain;f=src%2Fsocket_server.cpp;h=0eff67623fdb5d9463f40ebd8f2af96db4175b28;hp=38c2ea95581c23c8d92cac15612e2fec7180ad00;hb=45a2ebc9695c4d7be6548b7e0f800d117ae56a0b;hpb=a7170401dd90dc79cc7d7a808cfe18a06c7e983b diff --git a/src/socket_server.cpp b/src/socket_server.cpp index 38c2ea9..0eff676 100644 --- a/src/socket_server.cpp +++ b/src/socket_server.cpp @@ -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)