iocp_3_如何提交申请

iocp_3_如何提交申请

ID:40555711

大小:77.50 KB

页数:7页

时间:2019-08-04

iocp_3_如何提交申请_第1页
iocp_3_如何提交申请_第2页
iocp_3_如何提交申请_第3页
iocp_3_如何提交申请_第4页
iocp_3_如何提交申请_第5页
资源描述:

《iocp_3_如何提交申请》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、<三>如何提交I/O请求在知道IOCP的大体实现过程和对OVELAPPED有了充分的了解,接下来,该看看细节问题了。下面看看如何向I/O管理器提交I/O请求。1)连接对方的请求,ConnectEx。2)接受连接请求,AcceptEx。3)发送数据请求,WSASend4)接收数据请求,WSARecv1.连接对方的请求,ConnectEx在第一篇中,实现IOCP的前三个步骤,简单展示了如何创建一个连接socket(要详细了解每一步,看看MSDN,比较简单,这里也不再说了)。接下来是连接操作。1.1先获得Connect

2、Ex函数的地址。LPFN_CONNECTEXm_lpfnConnectEx=NULL;//接口指针DWORDdwBytes=0;GUIDGuidConnectEx=WSAID_CONNECTEX;//接口GUIDif(SOCKET_ERROR==WSAIoctl(m_sockClient,//ConnectEx要用到的socketSIO_GET_EXTENSION_FUNCTION_POINTER,//或取函数操作&GuidConnectEx,//接口GUIDsizeof(GuidConnectEx),&m_lp

3、fnConnectEx,//函数指针sizeof(m_lpfnConnectEx),&dwBytes,0,0)){TRACE("WSAIoctlisfailed.Errorcode=%d",WSAGetLastError());returnFALSE;}//这个函数比较复杂,但只要按上述方式调用,就可获得ConnectEx函数的指针了。1.2开始提交Connext请求。和普通的socket连接,有以下的几点区别:(1)要提供OVERLAPPED结构。(2)通过OVERLAPPED的扩展数据指明是ConnectEx

4、请求。(3)在建立连接后还可以立刻发送数据,这里不发送。//OVERLAPPED结构,socket和I/O管理器通讯的载体,定义见代码MYOVERLAPPED*pmyoverlapped=newMYOVERLAPPED;//socket和I/O通讯的载体pmyoverlapped->operateType=OP_CONNECT;//设置请求类型,得到I/O结果时根据此来识别类型pmyoverlapped->hEvent=NULL;//注意这里,设置为非事件驱动方式//否则,GetQueuedCompletionS

5、tatus拿不到结果//Thesockaddr_instructurespecifiestheaddressfamily,//IPaddress,andportoftheservertobeconnectedto.sockaddr_inaddrPeer;ZeroMemory(&addrPeer,sizeof(sockaddr_in));addrPeer.sin_family=AF_INET;addrPeer.sin_addr.s_addr=inet_addr("192.168.0.15");addrPeer.si

6、n_port=htons(5400);intnLen=sizeof(addrPeer);PVOIDlpSendBuffer=NULL;//不提供发送数据的bufDWORDdwSendDataLength=0;DWORDdwBytesSent=0;BOOLbResult=m_lpfnConnectEx(m_sockClient,//发起连接请求的socket(sockaddr*)&addrPeer,//对端的地址nLen,//对端地址长度lpSendBuffer,//连接后要发送的内容,这里不用dwSendData

7、Length,//发送内容的字节数,这里不用&dwBytesSent,//[out]发送了多少个字节,这里不用(OVERLAPPED*)pmyoverlapped);//OVERLAPPED结构if(!bResult)//返回值得判断很重要{if(WSAGetLastError()!=ERROR_IO_PENDING){TRACE(TEXT("ConnextExerror:%d"),WSAGetLastError());returnFALSE;}else{TRACE0("WSAGetLastError()==

8、ERROR_IO_PENDING");}}//连接请求已提交,到I/O出口去等待结果吧!//好,连接请求已发出,那就到对端接受了。2.接受连接请求,AcceptEx。AcceptEx和ConnectEx是服务端和客户端两个对应的操作,如果能理解ConnectEx,那么理解AcceptEx也就容易多了。有两点和AcceptEx不同且要注意的是:(1)在AcceptEx中

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。