2008-11-08 22 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提到的那样),如果你的网络库从你下面被取消,你将不得不做更多的工作。

当然,如果你确信你将永远不会离开微软的温暖怀抱,随意去镇上。

相关问题