客户端在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属性。