diff --git a/net/sock.c b/net/sock.c index ab417d6..f77a9f2 100644 --- a/net/sock.c +++ b/net/sock.c @@ -204,6 +204,21 @@ int sock_valid_socket(sock_t sock) return (ret == 0); } + +/* determines if the passed socket is still connected */ +int sock_active (sock_t sock) +{ + char c; + int l; + + l = recv (sock, &c, 1, MSG_PEEK); + if (l == 0) + return 0; + if (l < 0 && sock_recoverable (sock_error())) + return 1; + return 0; +} + /* inet_aton ** ** turns an ascii ip address into a binary representation diff --git a/net/sock.h b/net/sock.h index 8bd6248..b74a766 100644 --- a/net/sock.h +++ b/net/sock.h @@ -105,6 +105,7 @@ int sock_error(void); int sock_recoverable(int error); int sock_stalled(int error); int sock_valid_socket(sock_t sock); +int sock_active (sock_t sock); int sock_set_blocking(sock_t sock, const int block); int sock_set_nolinger(sock_t sock); int sock_set_keepalive(sock_t sock);