From: Kevin Hock Date: Wed, 22 Feb 2006 01:55:43 +0000 (+0000) Subject: Rearrange and simplify read and error checks, and remove use of MSG_PEEK that is... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/b74865fa61c17c45f65d9f59befc52516e41c9c7?ds=inline Rearrange and simplify read and error checks, and remove use of MSG_PEEK that is unneeded and not supported on CE anyway [ Modified & Expanded Patch 1428745 ] git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37667 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/msw/gsocket.cpp b/src/msw/gsocket.cpp index d72e553f28..0bbfea6275 100644 --- a/src/msw/gsocket.cpp +++ b/src/msw/gsocket.cpp @@ -848,30 +848,28 @@ GSocketEventFlags GSocket::Select(GSocketEventFlags flags) return (result & flags); } - /* Check for readability */ - if (FD_ISSET(m_fd, &readfds)) + /* Check for exceptions and errors */ + if (FD_ISSET(m_fd, &exceptfds)) { - char c; + m_establishing = false; + m_detected = GSOCK_LOST_FLAG; - if (!m_stream || recv(m_fd, &c, 1, MSG_PEEK) > 0) - { - result |= GSOCK_INPUT_FLAG; - } - else - { - if (m_server && m_stream) - { - result |= GSOCK_CONNECTION_FLAG; - m_detected |= GSOCK_CONNECTION_FLAG; - } - else - { - m_detected = GSOCK_LOST_FLAG; - m_establishing = false; + /* LOST event: Abort any further processing */ + return (GSOCK_LOST_FLAG & flags); + } - /* LOST event: Abort any further processing */ - return (GSOCK_LOST_FLAG & flags); - } + /* Check for readability */ + if (FD_ISSET(m_fd, &readfds)) + { + result |= GSOCK_INPUT_FLAG; + + if (m_server && m_stream) + { + /* This is a TCP server socket that detected a connection. + While the INPUT_FLAG is also set, it doesn't matter on + this kind of sockets, as we can only Accept() from them. */ + result |= GSOCK_CONNECTION_FLAG; + m_detected |= GSOCK_CONNECTION_FLAG; } } @@ -906,16 +904,6 @@ GSocketEventFlags GSocket::Select(GSocketEventFlags flags) } } - /* Check for exceptions and errors (is this useful in Unices?) */ - if (FD_ISSET(m_fd, &exceptfds)) - { - m_establishing = false; - m_detected = GSOCK_LOST_FLAG; - - /* LOST event: Abort any further processing */ - return (GSOCK_LOST_FLAG & flags); - } - return (result & flags); } else /* USE_GUI() */ diff --git a/src/unix/gsocket.cpp b/src/unix/gsocket.cpp index 8bf9517551..97eeb0153b 100644 --- a/src/unix/gsocket.cpp +++ b/src/unix/gsocket.cpp @@ -1213,37 +1213,28 @@ GSocketEventFlags GSocket::Select(GSocketEventFlags flags) return (result & flags); } + /* Check for exceptions and errors */ + if (wxFD_ISSET(m_fd, &exceptfds)) + { + m_establishing = false; + m_detected = GSOCK_LOST_FLAG; + + /* LOST event: Abort any further processing */ + return (GSOCK_LOST_FLAG & flags); + } + /* Check for readability */ if (wxFD_ISSET(m_fd, &readfds)) { - char c; - - int num = recv(m_fd, &c, 1, MSG_PEEK | GSOCKET_MSG_NOSIGNAL); + result |= GSOCK_INPUT_FLAG; - if (num > 0) - { - result |= GSOCK_INPUT_FLAG; - } - else + if (m_server && m_stream) { - if (m_server && m_stream) - { - result |= GSOCK_CONNECTION_FLAG; - m_detected |= GSOCK_CONNECTION_FLAG; - } - /* If recv returned zero, then the connection is lost, and errno is not set. - * Otherwise, recv has returned an error (-1), in which case we have lost the - * socket only if errno does _not_ indicate that there may be more data to read. - */ - else if (num == 0 || - (errno != EWOULDBLOCK) && (errno != EAGAIN) && (errno != EINTR)) - { - m_detected = GSOCK_LOST_FLAG; - m_establishing = false; - - /* LOST event: Abort any further processing */ - return (GSOCK_LOST_FLAG & flags); - } + /* This is a TCP server socket that detected a connection. + While the INPUT_FLAG is also set, it doesn't matter on + this kind of sockets, as we can only Accept() from them. */ + result |= GSOCK_CONNECTION_FLAG; + m_detected |= GSOCK_CONNECTION_FLAG; } } @@ -1278,16 +1269,6 @@ GSocketEventFlags GSocket::Select(GSocketEventFlags flags) } } - /* Check for exceptions and errors (is this useful in Unices?) */ - if (wxFD_ISSET(m_fd, &exceptfds)) - { - m_establishing = false; - m_detected = GSOCK_LOST_FLAG; - - /* LOST event: Abort any further processing */ - return (GSOCK_LOST_FLAG & flags); - } - return (result & flags); }