Я пытаюсь получить что-то на UDP
, пока приложение находится в фоновом режиме, и я не знаю, что я делаю неправильно или какой обратный вызов (если есть) вызывается, когда доступны данные UDP
.
Я использую разъем BSD и установил флаги voip
с помощью следующего кода:
CFSocketContext socketCtxt = {0, self, NULL, NULL, NULL};
CFSocketNativeHandle ffsocket = (CFSocketNativeHandle)_socket;
//CFSocketRef socket = CFSocketCreateWithNative(kCFAllocatorDefault, ffsocket, kCFSocketDataCallBack, (CFSocketCallBack)SocketCallBack, &socketCtxt);
CFSocketRef socket = CFSocketCreateWithNative(kCFAllocatorDefault, ffsocket, kCFSocketReadCallBack, (CFSocketCallBack)SocketCallBack, &socketCtxt);
CFRunLoopSourceRef source = CFSocketCreateRunLoopSource(NULL, socket, 0);
//CFRunLoopRef loop = CFRunLoopGetMain();
CFRunLoopRef loop = CFRunLoopGetCurrent();
CFRunLoopAddSource(loop, source, kCFRunLoopDefaultMode);
CFReadStreamRef readStream = NULL;
CFStreamCreatePairWithSocket(kCFAllocatorDefault, ffsocket,
&readStream, nil);
Boolean ret = CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
NSInputStream *inputStream = (NSInputStream*)readStream;
[inputStream setProperty:NSStreamNetworkServiceType forKey:NSStreamNetworkServiceTypeVoIP];
//[inputStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType];
[inputStream setDelegate:self];
//[inputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream open];
CFReadStreamOpen(readStream);
_socket - ранее созданный сокет BSD.
На переднем плане SocketCallBack
вызывается, когда доступны данные, но больше не вызывается в фоновом режиме.
У кого-нибудь есть идеи?