iOS: проблемы с получением данных UDP в фоновом режиме - PullRequest
1 голос
/ 28 июня 2011

Я пытаюсь получить что-то на 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 вызывается, когда доступны данные, но больше не вызывается в фоновом режиме.

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 29 ноября 2011

из документации Apple UDP не будет работать в последней iOS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...