【问题标题】:Is it possible to use pipes with iPhone berkley sockets?是否可以将管道与 iPhone 伯克利插座一起使用?
【发布时间】:2010-09-08 12:41:12
【问题描述】:

现在我正在编写一个将与网络交互的 iPhone 应用程序,并且我计划使用非阻塞的 berkley 套接字,这样我就可以完全控制 connect()、accept() 和 recv() 时间。我还不确定的一个问题是如何正确关闭 lenghly connect() 和 recv() 操作(可能长达几分钟)。在 UNIX 中,这是通过创建一个管道并在 select() 请求中与套接字一起使用它来完成的。在管道中写入内容将立即中止 select(),因此我可以检查是否关闭等。但是是否可以在 iPhone 上使用管道,是否可以将它们与 select() 一起使用?欢迎任何见解或评论。

【问题讨论】:

    标签: iphone


    【解决方案1】:

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

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

    另一种选择是 CFNetwork API,特别是 CFSocket。这些在 iOS 应用程序中集成得更好一些,并且还提供了不错的异步套接字操作。您可以在套接字旁边使用CFTimer 来关注超时,然后取消耗时过长的套接字操作。

    【讨论】:

    • 谢谢。什么是 iPhone API 来为此创建管道?
    • 你可以给CFSocket一对文件描述符。但关键是你不再需要那个管道了。因为'runloop'会处理所有的调度。它基本上为您完成了整个 select() 。 (尽管内部人员可能不会真正使用 select)
    • 此外,Apple 建议不要使用 BSD 套接字,因为它们可能无法很好地与设备上的某些底层网络功能集成。请在此处查看我的答案以获取更多信息:stackoverflow.com/questions/2488634/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 2021-08-01
    • 1970-01-01
    • 2011-05-03
    相关资源
    最近更新 更多