/////////////////////////////////////////////////////////////////////////////
-// Name: osx/core/gsockosx.cpp
+// Name: src/osx/core/gsockosx.cpp
// Purpose: wxSocketImpl implementation for OS X
// Authors: Brian Victor, Vadim Zeitlin
// Created: February 2002
#include "wx/private/socket.h"
#include "wx/unix/private/sockunix.h"
#include "wx/apptrait.h"
+#include "wx/link.h"
+
+#include "wx/osx/core/cfstring.h" // for wxMacWakeUp() only
#include <CoreFoundation/CoreFoundation.h>
CFSocketInvalidate(m_socket);
CFRelease(m_source);
+ m_source = NULL;
+
CFRelease(m_socket);
+ m_socket = NULL;
}
// initialize the data associated with the given socket
if ( !m_source )
{
CFRelease(m_socket);
+ m_socket = NULL;
+
return false;
}
// KH: If data is non-NULL, the connect failed, do not call Detected_Write,
// which will only end up creating a spurious connect event because the
// call to getsocketopt SO_ERROR inexplicably returns no error.
- // The change in behavior cannot be traced to any particular commit or
+ // The change in behaviour cannot be traced to any particular commit or
// timeframe so I'm not sure what to think, but after so many hours,
// this seems to address the issue and it's time to move on.
if (data == NULL)
default:
wxFAIL_MSG( "unexpected socket callback" );
}
+
+ // receiving a socket event does _not_ make ReceiveNextEvent() (or the
+ // equivalent NSApp:nextEventMatchingMask:untilDate:inMode:dequeue)
+ // return control, i.e. apparently it doesn't count as a real event, so
+ // we need to generate a wake up to return control to the code waiting
+ // for something to happen and process this socket event
+ wxMacWakeUp();
}
CFSocketRef m_socket;
}
} gs_OSXManagerSetter;
+// see the relative linker macro in socket.cpp
+wxFORCE_LINK_THIS_MODULE(osxsocket)
+
#endif // wxUSE_SOCKETS