From ed38631c6bd2f020d7dfd05be36d1dc4383ac643 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Sat, 2 Oct 1999 12:07:02 +0000 Subject: Anticipate the IDLE extension. svn path=/trunk/; revision=2630 --- socket.c | 27 ++++++++++++++++++++++++++- socket.h | 7 +++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/socket.c b/socket.c index c0925723..058fe2d5 100644 --- a/socket.c +++ b/socket.c @@ -92,6 +92,31 @@ static int handle_plugin(const char *host, } #endif /* HAVE_SOCKETPAIR */ +#ifdef __UNUSED__ +#include + +int SockCheckOpen(int fd) +/* poll given socket; is it selectable? */ +{ + fd_set r, w, e; + int rt; + struct timeval tv; + + for (;;) + { + FD_ZERO(&r); FD_ZERO(&w); FD_ZERO(&e); + FD_SET(fd, &e); + + tv.tv_sec = 0; tv.tv_usec = 0; + rt = select(fd+1, &r, &w, &e, &tv); + if (rt == -1 && (errno != EAGAIN && errno != EINTR)) + return 0; + if (rt != -1) + return 1; + } +} +#endif /* __UNUSED__ */ + #if INET6 int SockOpen(const char *host, const char *service, const char *options, const char *plugin) @@ -148,7 +173,7 @@ int SockOpen(const char *host, const char *service, const char *options, int SockOpen(const char *host, int clientPort, const char *options, const char *plugin) { - int sock; + int sock = -1; /* pacify -Wall */ #ifndef HAVE_INET_ATON unsigned long inaddr; #endif /* HAVE_INET_ATON */ diff --git a/socket.h b/socket.h index c493daa6..658918bb 100644 --- a/socket.h +++ b/socket.h @@ -16,6 +16,13 @@ int SockOpen(const char *host, int clientPort, const char *options, const char *plugin); #endif /* INET6 */ +/* Returns 1 if this socket is OK, 0 if it isn't select()able + * on - probably because it's been closed. You should + * always check this function before passing stuff to the + * select()-based waiter, as otherwise it may loop. + */ +int SockCheckOpen(int fd); + /* Get a string terminated by an '\n' (matches interface of fgets). Pass it a valid socket, a buffer for the string, and -- cgit v1.2.3