2010-09-08 69 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

相關問題