void CZeroconfOSX::cancelRegistration(CFNetServiceRef theService) { assert(theService != NULL); CFNetServiceUnscheduleFromRunLoop(theService, m_runloop, kCFRunLoopCommonModes); CFNetServiceSetClient(theService, NULL, NULL); CFNetServiceCancel(theService); CFRelease(theService); }
void ofxBonjourIp::stopService(){ if(netService) { CFNetServiceCancel(netService); CFNetServiceUnscheduleFromRunLoop(netService, CFRunLoopGetCurrent(),kCFRunLoopCommonModes); CFNetServiceSetClient(netService, NULL, NULL); CFRelease(netService); netService = NULL; } }
/* static */ void _ServerReleaseNetService(Server* server) { // Unschedule, cancel, and release the net service if there is one. if (server->_service != NULL) { CFNetServiceUnscheduleFromRunLoop(server->_service, CFRunLoopGetCurrent(), kCFRunLoopCommonModes); CFNetServiceSetClient(server->_service, NULL, NULL); CFNetServiceCancel(server->_service); CFRelease(server->_service); server->_service = NULL; } }
static int _netservice_get_first_addr( CFNetServiceRef netService, socklen_t * size, struct sockaddr ** addr ) { CFArrayRef addresses; CFDataRef data; CFNetServiceCancel( netService ); CFNetServiceResolveWithTimeout( netService, 0.1, NULL ); addresses = CFNetServiceGetAddressing( netService ); if( addresses == NULL || CFArrayGetCount( addresses ) < 1 ) { return 1; } data = CFArrayGetValueAtIndex( addresses, 0 ); *size = CFDataGetLength( data ); *addr = CFDataGetBytePtr( data ); return 0; }