Winsock和Posix的socket编程,主要区别是在哪里?

caerqq 2012-08-08 10:32:33
VC的socket变成除了在程序开始/结束的时候要掉WSAInit等函数来初始化和释放资源以外,编程模型方面和posix的标准socket编程到底有哪些重要的区别呢?

有什么特别的地方是winsock可以做的而标准的posix socket做不到的?
...全文
387 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2012-08-08
  • 打赏
  • 举报
回复
不同平台的支持,应该都实现了近似的功能
ouyh12345 2012-08-08
  • 打赏
  • 举报
回复
没什么大区别,都是协议的具体体现
因为多线程和ipc,可能iocp和e-pool是最大的不同吧
youngwolf 2012-08-08
  • 打赏
  • 举报
回复
网络模型本质上分两娄:
一是对可读可写状态的查询(select pselect poll ppoll epoll WSAAsynSelect WSAEventSelect);
一是对读写结果的查询(重叠IO、完成端口、aio、libaio);
对于aio,它是glibc实现的异步IO模型,对于libaio,它是linux下专有异步IO模型,aio并不是对libaio的包装,而是另外实现的。aio目前来说似乎没有统一,资料也不全,能否用于套接字,我也不太清楚。

对于可读可写的查询,又分两类:
一类是用户维护查询列表及状态(select pselect poll ppoll);
一类是系统维护查询列表及状态(WSAAsynSelect WSAEventSelect epoll);
注:对于WSAAsynSelect WSAEventSelect的具体工作模式,我也不太清楚,感觉是这样。

如果非要说windows能做posix不能做,那可能就是不aio和libaio了,上面说了,我也不太清楚它是否能用于套接字,如果不能,那posix下就根本没有异步IO模型了(用于套接字的)

windows和posix就一个几乎完全一样,那就是select,你几乎用这个模型,马上就能写出一个跨平台的程序,但它们有小的区别:
一是第一个参数nfds,在win下无用,在posix下有用,还必须设置正确,可以看man帮助;
二是posix可能会修改最后一个参数表达还剩余多少时间,而win则不会(感觉,你看看msdn吧);

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧