2010-09-08 29 views
1

现在我正在编写一个iPhone应用程序,它将与网络进行交互,并且我打算使用非阻塞的berkley套接字,以便完全控制connect(),accept()和recv()的时序。我不确定的一个问题是如何正确关闭连接()和recv()操作(可能需要几分钟)。在UNIX中,这是通过在select()请求中创建管道并将其与套接字一起使用来完成的。写在管道中的东西会立即中止select(),所以我可以检查关闭等。但是有可能在iPhone上使用管道,是否有可能使用select()?欢迎任何见解或评论。是否可以使用管道与iPhone berkley套接字?

回答

2

是的,这是完全可能的。 iPhone基本上与OS X运行相同的操作系统,并且如果不是所有标准设施(如套接字和管道)则大部分都是如此。

如果您熟悉这些,请使用它们。

另一种方法是CFNetwork API,特别是CFSocket。这些在iOS应用程序中集成得更好一些,并且还提供了很好的异步套接字操作。您可以在套接字旁边使用CFTimer以关注超时,然后取消花费太长时间的套接字操作。

+0

谢谢。什么是iPhone API来创建管道? – grigoryvp 2010-09-08 14:09:42

+0

您可以为'CFSocket'提供一对文件描述符。但重要的是,你不再需要这个管道。由于'runloop'将负责所有的调度。它基本上为你做了整个select()。 (尽管内部可能不会使用select) – 2010-09-08 14:32:04

+1

此外,Apple建议不要使用BSD套接字,因为它们可能无法很好地与设备上的某些底层网络功能集成。请参阅我的答案以获取更多信息:http://stackoverflow.com/questions/2488634/bsd-sockets-dont-behave-in-a-iphone-3g-environment/2488657#2488657 – 2010-09-08 20:05:21

相关问题