/* If socket is already created, returns a pointer to the data */
/* Otherwise, creates socket and returns the pointer */
CFSocketContext cont;
+ CFSocketRef cf;
+ CFRunLoopSourceRef source;
+
struct MacGSocketData* data = (struct MacGSocketData*)socket->m_gui_dependent;
if (data && data->source) return data;
cont.release = NULL; cont.copyDescription = NULL;
cont.info = socket;
- CFSocketRef cf = CFSocketCreateWithNative(NULL, socket->m_fd,
+ cf = CFSocketCreateWithNative(NULL, socket->m_fd,
ALL_CALLBACK_TYPES, Mac_Socket_Callback, &cont);
- CFRunLoopSourceRef source = CFSocketCreateRunLoopSource(NULL, cf, 0);
+ source = CFSocketCreateRunLoopSource(NULL, cf, 0);
assert(source);
- /* Turn off kCFSocketCloseOnInvalidate (NOTE: > 10.2 only!) */
- /* Another default flag that we don't turn on here is for DataCallBack and
- also AcceptCallback (which overlap in bits) which we don't use anyway */
- /* FIXME: For < 10.2 compatibility fix GSocket to call a platform-dependent
- function to close the socket so that we can just call invalidate and
- avoid having to set any special flags at all. */
- CFSocketSetSocketFlags(cf, kCFSocketAutomaticallyReenableReadCallBack | kCFSocketAutomaticallyReenableWriteCallBack);
socket->m_gui_dependent = (char*)data;
/* Keep the source and the socket around. */
struct MacGSocketData *data = (struct MacGSocketData*)(socket->m_gui_dependent);
if (data)
{
- CFSocketInvalidate(data->socket);
CFRelease(data->socket);
free(data);
}
struct MacGSocketData* data = _GSocket_Get_Mac_Socket(socket);
if (!data) return;
+ /* CFSocketInvalidate does CFRunLoopRemoveSource anyway */
CFRunLoopRemoveSource(CFRunLoopGetCurrent(), data->source, kCFRunLoopCommonModes);
+ CFSocketInvalidate(data->socket);
}
#endif // wxUSE_SOCKETS