2008-11-08 45 views

回答

2

最顯著差別是Winsock的異步事件風格的API的可用性。

伯克利插座,每次readwrite你的申請將「塊」,直到網絡已準備就緒,這可能使您的應用程序沒有響應(除非網絡I/O是在不同的線程處理)。

隨着異步接口,可以爲一個回調函數安排被稱爲正常窗口消息循環每次接收數據時,或者當發送緩衝器爲空的一部分。

+1

在Linux,BSD套接字允許非阻塞讀,或者你可以使用select(),看看是否有任何數據可用。我假設在Windows上也是如此,但可能是BSD套接字API中缺少該功能。 – davr 2009-12-21 02:47:14

2

只有當您計劃部署到像Windows 95這樣的傳統平臺,或者winsock API中有某些東西是絕對不能缺少的東西時,您不想自己推出(< - 可疑的壽)。

0

對於參宿一的答案,我同意 - 我只想補充一點,你不需要使用消息循環使用非同步操作上的插座。使用I/O完成端口是構建高性能網絡應用程序的一種非常可擴展的方式。

1

如果你周圍的BSD範型設計,你的代碼可以在其他平臺上以較少的移植工作,工作。如果你認爲你的網絡庫將支持異步I/O(就​​像Alnitak提到的那樣),如果你的網絡庫從你下面被取消,你將不得不做更多的工作。

當然,如果你確信你將永遠不會離開微軟的溫暖懷抱,隨意去鎮上。

相關問題