From 8feaa527bcdd0d2ad52a940d8428f63a5f8f4005 Mon Sep 17 00:00:00 2001 From: jsorg71 Date: Wed, 11 Apr 2007 03:44:46 +0000 Subject: [PATCH] added tcp_socket_ok to test socket status --- common/os_calls.c | 28 ++++++++++++++++++++++++++-- common/os_calls.h | 2 ++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/common/os_calls.c b/common/os_calls.c index 0900c291..9bb5ef1f 100644 --- a/common/os_calls.c +++ b/common/os_calls.c @@ -434,6 +434,30 @@ g_tcp_send(int sck, const void* ptr, int len, int flags) #endif } +/*****************************************************************************/ +/* returns boolean */ +int APP_CC +g_tcp_socket_ok(int sck) +{ +#if defined(_WIN32) + int opt; + int opt_len; +#else + int opt; + unsigned int opt_len; +#endif + + opt_len = sizeof(opt); + if (getsockopt(sck, SOL_SOCKET, SO_ERROR, (char*)(&opt), &opt_len) == 0) + { + if (opt == 0) + { + return 1; + } + } + return 0; +} + /*****************************************************************************/ /* wait 'millis' milliseconds for the socket to be able to write */ /* returns boolean */ @@ -453,7 +477,7 @@ g_tcp_can_send(int sck, int millis) rv = select(sck + 1, 0, &wfds, 0, &time); if (rv > 0) { - return 1; + return g_tcp_socket_ok(sck); } } return 0; @@ -478,7 +502,7 @@ g_tcp_can_recv(int sck, int millis) rv = select(sck + 1, &rfds, 0, 0, &time); if (rv > 0) { - return 1; + return g_tcp_socket_ok(sck); } } return 0; diff --git a/common/os_calls.h b/common/os_calls.h index e6b5f278..845c2558 100644 --- a/common/os_calls.h +++ b/common/os_calls.h @@ -80,6 +80,8 @@ g_tcp_send(int sck, const void* ptr, int len, int flags); int APP_CC g_tcp_last_error_would_block(int sck); int APP_CC +g_tcp_socket_ok(int sck); +int APP_CC g_tcp_can_send(int sck, int millis); int APP_CC g_tcp_can_recv(int sck, int millis);