Windows完成端口(Completion Port)编程小结

本文详细介绍了Windows下完成端口(I/O Completion Ports, IOCP)的编程,包括完成端口的基本概念、创建方法、使用场景及示例程序。IOCP在处理大量并发I/O请求时展现出优秀的性能和可伸缩性,适用于高性能服务器程序设计。文中还讨论了使用IOCP时的注意事项,如ConnectEx与getpeername的问题,以及如何恰当地关闭IOCP。" 127844360,10925334,Java NIO面试关键知识点解析,"['Java', '网络编程', '服务器', 'NIO框架', 'Netty']
摘要由CSDN通过智能技术生成

完成端口中ConnectEx的问题:

完成端口用于客户端时一定要注意,创建的SOCKET要先随便绑定一个端口(默认0自动分配也可),然后再扔到完成端口中去,之后才可以ConnectEx,否则(不绑定)ConnectEx会出现10022错误。同时,getpeername似乎对ConnectEx不支持,也可能有其他细节设置我暂时不知道,返回的远程地址是无效的(仅对于完成端口用于服务器accept回来的SOCKET有效,对用于客户的connet也有效)。不过对程序没有太大影响,既然是自己要主动连出去,远程地址当然自己早就心里明白了,自己保存一份即可,不必getpeername。备注:getsockname返回本地地址一直是有效的。

getpeername之所以取不到正确的内容,是因为ConnectEx返回后,socket相关的属性还没有更新(ConnectEx的特性所导致),你应该调用一下setsockopt更新socket的属性后再调用getpeername。参数是SOL_SOCKETSO_UPDATE_CONNECT_CONTEXT

When the ConnectEx function returns, the socket s is in the default state for a connected socket. The socket s does not enable previously set properties or options until SO_UPDATE_CONNECT_CONTEXT is set on the socket. Use the setsockopt function to set the SO_UPDATE_CONNECT_CONTEXT option.

For example:

err = setsockopt(s, SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, NULL, 0);

 

完成端口与ACE框架:

平台不同,使用的ACE框架还是有所差别的。比如

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值