如何关闭在recvfrom上阻止的UDP套接字

时间:2012-06-15 10:12:58

标签: c sockets udp nsthread

我正在使用C套接字为iPhone做应用程序。在某些时候,我在单独的recvfrom(阻塞)上执行NSThread,我不知道如何强制执行此操作以“解除阻止”并正常退出线程。调用shutdown()close()不会改变任何内容,recvfrom仍会挂起。有没有办法将它保持为阻塞套接字并强制它正确关闭并退出线程?

由于我被指责没有尝试任何操作,这是我的一段代码,不会导致recvfrom“解锁”:

这就是我现在所拥有的:

- (void) stopScan
{
    NSLog(@"stopScan !!!");
    [activityIndicator stopAnimating];
    shutdown(broadcastSocket, SHUT_RDWR);
    close(broadcastSocket);
    [discoveryThread cancel];
    [discoveryThread release];
    discoveryThread = nil;
    [scanTimer invalidate];
    broadcastSocket = 0;
    scanTimer = nil;
}

仅调用shutdown()close()也不会取消阻止。

1 个答案:

答案 0 :(得分:1)

听起来你还没有尝试过任何东西。关闭它。 recvfrom()将退出并显示错误。