pool.ntp.org와 연결하여 시간 동기화를 원합니다. 그래서IOS가 데이터 시간 초과를 수신함 CFsocket
sock=CFSocketCreate(NULL, PF_INET, SOCK_DGRAM, IPPROTO_UDP, kCFSocketDataCallBack|kCFSocketWriteCallBack|kCFSocketConnectCallBack, sockCallback, &sock_ctx);
다음 소켓을 만드는 오전하는 루프
sockref=CFSocketCreateRunLoopSource(NULL, sock, 0);
CFRunLoopAddSource(CFRunLoopGetMain(), sockref, kCFRunLoopCommonModes);
을 설정하고 주소
CFDataRef adrref=CFDataCreate(NULL, (const UInt8 *)&adr, sizeof(adr));
CFSocketError err=CFSocketConnectToAddress(sock, adrref,-1);
에 연결 내가 kCFSocketWriteCallBack 콜백이 있다면 내가 필요한 데이터를 전송하고
CFDataRef bufref=CFDataCreate(NULL, buffer, scl->NTP_PACKET_SIZE);
CFSocketError error = CFSocketSendData(scl->sock, NULL, bufref,3);
여기까지 완벽하게 작동합니다. 내 실제 문제는로입니다
else if(callbackType==kCFSocketDataCallBack)
9/10 번 작업이 정상입니다. 서버가 응답을 보내고 프로세스가 계속됩니다. 문제는 데이터가 실제로 내 앱 로직을 계속 수행 할 때까지 기다리는 것입니다. 데이터가 없으면 kCFSocketDataCallBack
가 실행되지 않고 앱이 계속 대기합니다. 데이터를 받기 위해 시간 초과를 할 수있는 방법이 있습니까? (자신이 풀을 사용하지 않고 NSTimer
을 사용하지 않고)
동일한 문제가 발생합니다. 해결책을 찾았습니까? – xjdrew