读书人

overlapped socket,该如何解决

发布时间: 2012-09-14 23:00:49 作者: rapoo

overlapped socket
我知道WSASocket 可以创建overlapped socket.
但是用accept返回的socket,我要怎么才能保证它是overlapped的?
我怎么查询一个socket是否是overlapped?

[解决办法]
调用WSAAccept()时会创建一个socket,只是真正的接受connect后,会返回新的有效的socket,这个新的socket实际上就是之前创建的那个socket,只是进行了一些内部设置而已

本质上说,socket IO应该不算是socket的一部分,而是属于异步IO的范畴
[解决办法]
accept得到的socket与监听的socket的属性一样。

另外,winsock 1.0版本的函数,创建的socket都是带重叠属性的,WSASocket才有可能创建出不带重叠属性的socket,这一点很多人没搞懂,WSASocket其实默认创建出来的才是不带重叠属性的sokcet,而socket函数默认创建出来的,是带重叠属性的。
[解决办法]
你不用纠结于判断一个socket是否是重叠模式, 因为你创建的时候就设置好了是不是,看下面代码:
// 需要使用重叠IO,必须得使用WSASocket来建立Socket,才可以支持重叠IO操作
m_pListenContext->m_Socket = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);

看到最后一个参数没有? 那表明创建的是重叠模式的IO
[解决办法]
楼上,accept和WSAAccept调用不是你先创建socket的,而是它返回一个socket;
AcceptEx才是你说的情况,需要先创建socket,再调用它。

读书人网 >VC/MFC

热点推荐