Fix wxSocket::WaitForAccept() in worker thread.

This was broken because Select() never returned wxSOCKET_CONNECTION_FLAG which
is supposed to be set when a connection is accepted.

Closes #15669.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75205 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2013-11-16 23:37:28 +00:00
parent 8f11f7f6a2
commit b6c6bceb94

View File

@@ -1357,7 +1357,25 @@ wxSocketEventFlags wxSocketImpl::Select(wxSocketEventFlags flags,
wxSocketEventFlags detected = 0;
if ( preadfds && wxFD_ISSET(m_fd, preadfds) )
detected |= wxSOCKET_INPUT_FLAG;
{
// check for the case of a server socket waiting for connection
if ( m_server && (flags & wxSOCKET_CONNECTION_FLAG) )
{
int error;
SOCKOPTLEN_T len = sizeof(error);
m_establishing = false;
getsockopt(m_fd, SOL_SOCKET, SO_ERROR, (char*)&error, &len);
if ( error )
detected = wxSOCKET_LOST_FLAG;
else
detected |= wxSOCKET_CONNECTION_FLAG;
}
else // not called to get non-blocking accept() status
{
detected |= wxSOCKET_INPUT_FLAG;
}
}
if ( pwritefds && wxFD_ISSET(m_fd, pwritefds) )
{