Desidero connettermi a pool.ntp.org per sincronizzare l'ora. Così sono la creazione di un socketIOS che riceve il timeout dei dati CFsocket
sock=CFSocketCreate(NULL, PF_INET, SOCK_DGRAM, IPPROTO_UDP, kCFSocketDataCallBack|kCFSocketWriteCallBack|kCFSocketConnectCallBack, sockCallback, &sock_ctx);
poi sono la creazione di un ciclo
sockref=CFSocketCreateRunLoopSource(NULL, sock, 0);
CFRunLoopAddSource(CFRunLoopGetMain(), sockref, kCFRunLoopCommonModes);
e il collegamento all'indirizzo
CFDataRef adrref=CFDataCreate(NULL, (const UInt8 *)&adr, sizeof(adr));
CFSocketError err=CFSocketConnectToAddress(sock, adrref,-1);
se ho richiamata kCFSocketWriteCallBack i inviare i dati richiesti
CFDataRef bufref=CFDataCreate(NULL, buffer, scl->NTP_PACKET_SIZE);
CFSocketError error = CFSocketSendData(scl->sock, NULL, bufref,3);
tutto fino a qui funziona perfettamente.Il mio vero problema è a
else if(callbackType==kCFSocketDataCallBack)
9/10 volte funziona ok. server che invia la risposta e il mio processo continua. il problema è che sto aspettando che i dati giungano effettivamente alla logica della mia app. se nessun dato arriva kCFSocketDataCallBack
non viene attivato e l'app attende per sempre. C'è un modo per mettere un timeout in attesa di ricevere dati? (Senza avere da solo un NSTimer
per riconnettersi al pool)
Incontro lo stesso problema, trovi qualche soluzione? – xjdrew