diff options
author | jsorg71 <jsorg71> | 2007-04-11 03:44:46 +0000 |
---|---|---|
committer | jsorg71 <jsorg71> | 2007-04-11 03:44:46 +0000 |
commit | 8feaa527bcdd0d2ad52a940d8428f63a5f8f4005 (patch) | |
tree | 4473866881967db861fb02fbe655851cff703170 | |
parent | 50817f791efd95995e10ba04bc53c7689d1d9af5 (diff) | |
download | xrdp-proprietary-8feaa527bcdd0d2ad52a940d8428f63a5f8f4005.tar.gz xrdp-proprietary-8feaa527bcdd0d2ad52a940d8428f63a5f8f4005.zip |
added tcp_socket_ok to test socket status
-rw-r--r-- | common/os_calls.c | 28 | ||||
-rw-r--r-- | 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 @@ -435,6 +435,30 @@ g_tcp_send(int sck, const void* ptr, int len, int flags) } /*****************************************************************************/ +/* 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 */ int APP_CC @@ -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); |