How to detect whether socket is still connected...

How to detect whether socket is still connected…

From wget source code…

bool
test_socket_open (int sock)
{
  fd_set check_set;
  struct timeval to;
  int ret = 0;

  /* Check if we still have a valid (non-EOF) connection.  From Andrew
   * Maholski's code in the Unix Socket FAQ.  */

  FD_ZERO (&check_set);
  FD_SET (sock, &check_set);

  /* Wait one microsecond */
  to.tv_sec = 0;
  to.tv_usec = 1;

  ret = select (sock + 1, &check_set, NULL, NULL, &to);
#ifdef WINDOWS
/* gnulib select() converts blocking sockets to nonblocking in windows.
wget uses blocking sockets so we must convert them back to blocking
*/
  set_windows_fd_as_blocking_socket ( sock );
#endif

  if ( !ret )
    /* We got a timeout, it means we're still connected. */
    return true;
  else
    /* Read now would not wait, it means we have either pending data
       or EOF/error. */
    return false;
}
posted @ 2014-07-19 22:07  英超  Views(349)  Comments(0Edit  收藏  举报