diff options
author | unknown <stewart@mysql.com> | 2005-09-15 00:21:25 +1000 |
---|---|---|
committer | unknown <stewart@mysql.com> | 2005-09-15 00:21:25 +1000 |
commit | c6ff73b91fb3b32b1cb6b9b44caa716560248b29 (patch) | |
tree | 505aa0cf1e61879aa2cd274c6c41b1c9e861c743 /ndb | |
parent | afbfd12ed2fa93ad71a30b90ad29453cd5a2bc09 (diff) | |
download | mariadb-git-c6ff73b91fb3b32b1cb6b9b44caa716560248b29.tar.gz |
BUG#13136 NdbTCP.cpp compile failure on OSX 10.2
use select if poll is unavailable.
ndb/src/common/portlib/NdbTCP.cpp:
Implement Ndb_check_socket_hup for systems without poll(2)
ndb/src/common/portlib/win32/NdbTCP.c:
fix typo (found while fixing this bug)
Diffstat (limited to 'ndb')
-rw-r--r-- | ndb/src/common/portlib/NdbTCP.cpp | 32 | ||||
-rw-r--r-- | ndb/src/common/portlib/win32/NdbTCP.c | 2 |
2 files changed, 33 insertions, 1 deletions
diff --git a/ndb/src/common/portlib/NdbTCP.cpp b/ndb/src/common/portlib/NdbTCP.cpp index 768292ac7c0..41471548b7e 100644 --- a/ndb/src/common/portlib/NdbTCP.cpp +++ b/ndb/src/common/portlib/NdbTCP.cpp @@ -86,6 +86,7 @@ Ndb_getInAddr(struct in_addr * dst, const char *address) { int Ndb_check_socket_hup(NDB_SOCKET_TYPE sock) { +#ifdef HAVE_POLL struct pollfd pfd[1]; int r; @@ -97,4 +98,35 @@ int Ndb_check_socket_hup(NDB_SOCKET_TYPE sock) return 1; return 0; +#else /* HAVE_POLL */ + fd_set readfds, writefds, errorfds; + struct timeval tv= {0,0}; + int s_err; + int s_err_size= sizeof(s_err); + + FD_ZERO(&readfds); + FD_ZERO(&writefds); + FD_ZERO(&errorfds); + + FD_SET(sock, &readfds); + FD_SET(sock, &writefds); + FD_SET(sock, &errorfds); + + if(select(1, &readfds, &writefds, &errorfds, &tv)<0) + return 1; + + if(FD_ISSET(sock,&errorfds)) + return 1; + + s_err=0; + if (getsockopt(sock, SOL_SOCKET, SO_ERROR, (char*) &s_err, &s_err_size) != 0) + return(1); + + if (s_err) + { /* getsockopt could succeed */ + return(1); /* but return an error... */ + } + + return 0; +#endif /* HAVE_POLL */ } diff --git a/ndb/src/common/portlib/win32/NdbTCP.c b/ndb/src/common/portlib/win32/NdbTCP.c index a14cd4409eb..5d6c0ae5c7d 100644 --- a/ndb/src/common/portlib/win32/NdbTCP.c +++ b/ndb/src/common/portlib/win32/NdbTCP.c @@ -52,7 +52,7 @@ int Ndb_check_socket_hup(NDB_SOCKET_TYPE sock) FD_SET(sock, &writefds); FD_SET(sock, &errorfds); - if(select(1, &readfds, &writefds, &errorfds, &t)==SOCKET_ERROR) + if(select(1, &readfds, &writefds, &errorfds, &tv)==SOCKET_ERROR) return 1; if(FD_ISSET(sock,&errorfds)) |