Ich möchte eine Verbindung mit pool.ntp.org herstellen, um die Zeit zu synchronisieren. So erschaffe eine BuchseIOS empfängt Daten-Timeout CFsocket
sock=CFSocketCreate(NULL, PF_INET, SOCK_DGRAM, IPPROTO_UDP, kCFSocketDataCallBack|kCFSocketWriteCallBack|kCFSocketConnectCallBack, sockCallback, &sock_ctx);
dann setze eine Schleife bis
sockref=CFSocketCreateRunLoopSource(NULL, sock, 0);
CFRunLoopAddSource(CFRunLoopGetMain(), sockref, kCFRunLoopCommonModes);
und an die Adresse Verbindungs
CFDataRef adrref=CFDataCreate(NULL, (const UInt8 *)&adr, sizeof(adr));
CFSocketError err=CFSocketConnectToAddress(sock, adrref,-1);
wenn i Rückruf kCFSocketWriteCallBack habe ich senden die erforderlichen Daten
CFDataRef bufref=CFDataCreate(NULL, buffer, scl->NTP_PACKET_SIZE);
CFSocketError error = CFSocketSendData(scl->sock, NULL, bufref,3);
alles bis hier funktioniert einwandfrei. Mein aktuelles Problem ist bei
else if(callbackType==kCFSocketDataCallBack)
9/10 mal funktioniert ok. Server sendet die Antwort und mein Prozess wird fortgesetzt. Das Problem ist, dass ich darauf warte, dass die Daten meine App-Logik fortsetzen. wenn keine Daten kommen kCFSocketDataCallBack
wird nicht ausgelöst und App wartet auf immer. Gibt es eine Möglichkeit für mich, eine Zeitüberschreitung beim Warten auf den Empfang von Daten zu setzen (ohne NSTimer
, um mich wieder mit dem Pool zu verbinden)
Ich stoße auf das gleiche Problem, finden Sie irgendeine Lösung? – xjdrew