Я поставил мой .plist запустить приложение во время фона и я установить соединение, как это:IOS VoIP приложение выхода из фона через некоторое время
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
//open c socket:
int rc; // ret code of s.c.
int my_socket;
struct sockaddr_in dest_addr;
my_socket = socket(AF_INET, SOCK_STREAM, 0);
assert(my_socket >= 0);
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(SERVER_LOC_PORT);
dest_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
memset(dest_addr.sin_zero,
'\0',
sizeof dest_addr.sin_zero);
rc = connect(my_socket,
(struct sockaddr *)&dest_addr,
(socklen_t) sizeof(dest_addr));
if(rc != 0){
return NO ;
}
NSLog(@"Start connection");
// Open a stream based on the existing socket. Then configure
// the stream for async operation.
CFStreamCreatePairWithSocket(NULL, my_socket, &readStream, &writeStream);
assert(readStream != NULL);
self.networkStreamIn = (NSInputStream *) readStream;
self.networkStreamOut = (NSOutputStream *) writeStream;
//releasers
CFRelease(readStream);
CFRelease(writeStream);
self.networkStreamIn.delegate = self;
self.networkStreamOut.delegate = self;
BOOL res = [self.networkStreamIn setProperty:NSStreamNetworkServiceTypeVoIP
forKey:NSStreamNetworkServiceType];
if(!res){
NSLog(@"Cannot connect") ;
// @TODO: Error handling here
}
[self.networkStreamIn scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.networkStreamIn open];
[self.networkStreamOut open];
Также я установил мой поток(), чтобы быть когда данные получены. Затем я прочитал запись с/на сервере. Это работа. на backgrount тоже. но через несколько минут (только в режиме backgound!) сервер печатает в журнале «java.net.SocketTimeoutException: Read timed out». и больше нет связи с клиентом (устройство iOS).
Я не устанавливал обработчик фона для соединения retiain - но он должен работать без этого обработчика (я думаю ..)!
Я пропустил что-то с этой конфигурацией гнезда?