小编tsp*_*zas的帖子

IOS接收数据超时CFsocket

我想与pool.ntp.org连接以进行时间同步.所以创建一个套接字

    sock=CFSocketCreate(NULL, PF_INET, SOCK_DGRAM, IPPROTO_UDP, kCFSocketDataCallBack|kCFSocketWriteCallBack|kCFSocketConnectCallBack, sockCallback, &sock_ctx);
Run Code Online (Sandbox Code Playgroud)

然后我正在建立一个循环

    sockref=CFSocketCreateRunLoopSource(NULL, sock, 0);
CFRunLoopAddSource(CFRunLoopGetMain(), sockref, kCFRunLoopCommonModes);
Run Code Online (Sandbox Code Playgroud)

并连接到该地址

    CFDataRef adrref=CFDataCreate(NULL, (const UInt8 *)&adr, sizeof(adr));
    CFSocketError err=CFSocketConnectToAddress(sock, adrref,-1);
Run Code Online (Sandbox Code Playgroud)

如果我有回调kCFSocketWriteCallBack我发送所需的数据

        CFDataRef bufref=CFDataCreate(NULL, buffer, scl->NTP_PACKET_SIZE);
    CFSocketError error = CFSocketSendData(scl->sock, NULL, bufref,3);
Run Code Online (Sandbox Code Playgroud)

直到这里的一切都很完美.我的实际问题是

else if(callbackType==kCFSocketDataCallBack)
Run Code Online (Sandbox Code Playgroud)

9/10次正常工作.服务器发送响应,我的过程继续.问题是我在等待数据实际继续我的app逻辑.如果没有数据没有kCFSocketDataCallBack被触发和app等待永远.有没有办法让我在等待接收数据时超时?(没有自己NSTimer重新连接到池)

iphone ntp nstimer ios cfsocket

8
推荐指数
1
解决办法
1317
查看次数

标签 统计

cfsocket ×1

ios ×1

iphone ×1

nstimer ×1

ntp ×1