客户端在ConnectEx成功之后,调用getpeername获取不到正确信息。
getpeername之所以取不到正确的内容,是因为ConnectEx返回后,socket相关的属性还没有更新(ConnectEx的特性所导致),你应该调用一下setsockopt更新socket的属性后再调用getpeername。参数是SOL_SOCKET和SO_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.同样,在服务器端,AcceptEx之后也需要setsockopt更新socket属性。
文章详细介绍了在使用ConnectEx成功连接后,getpeername为何无法获取到正确信息的原因及解决方案。重点在于理解ConnectEx返回后的socket状态及SO_UPDATE_CONNECT_CONTEXT的作用,同时对于服务器端的AcceptEx操作也提出了相似的处理建议。
717

被折叠的 条评论
为什么被折叠?



