How to detect whether socket is still connected...

How to detect whether socket is still connected…

From wget source code…

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 );

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