首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

IOCP一:AcceptEx「建议收藏」

异步IO请求分为:连接、接收、发送,分别对应AcceptEx、WSARecv、WSASend。 三参数:单句柄数据结构、单IO数据结构、传输字节数。...异步连接让所有运行的线程均为worker线程,且MSDN说AcceptEx比accpet连接进行得更快,可以用少量的线程处理大量的Client连接 整体过程: 1.创建listenSocket...,与本地地址绑定,开始监听; 2.将listenSocket添加到IOCP; 3.用AcceptEx在listenSocket上投递连接请求。...cs; //连接完成后要在新进连接上投递异步发送或接收,所以要事先把Client Socket记录下来以备后续使用 /*********************** 投递异步连接请求: 函数:AcceptEx...= GetLastError()) { std::cout<<"AcceptEx Failed : "<<GetLastError()<<std::endl; return false; }

87031
您找到你想要的搜索结果了吗?
是的
没有找到

accept 函数_accept函数是阻塞的吗

这是因为AcceptEx()是一个重叠操作,所以你需要事先创建一个套接字(但不要绑定或连接它),并把这个套接字通过参数传给AcceptEx()。...以下是一小段典型的使用AcceptEx()的伪代码: 引用 do {   -等待上一个 AcceptEx 完成   -创建一个新套接字并与完成端口进行关联   -设置背景结构等等   ...-发出一个 AcceptEx 请求 }while(TRUE); 作为一个高响应能力的服务器,它必须发出足够的AcceptEx调用,守候着,一旦出现客户端连接请求就立刻响应。...具体来说,如果你在发出AcceptEx()调用的同时传递了lpOutputBuffer参数,那么AcceptEx()不再是一项原子型的操作,而是分成了两步:接受客户连接,等待接收数据。...每个AcceptEx()调用都需要创建一个新套接字,所以最好有一个独立的线程专门调用AcceptEx(),而不参与其它I/O处理。你也可以利用这个线程来执行其它任务,比如事件记录。

1.1K20

accept 函数_case when函数

关于AcceptEx   使用此函数时,要包含头文:Mswsock.h,同时要链接:Mswsock.lib。可在源程序中加入下面的语句,这样在编译时,将自动链接Mswsock.lib。   ...#pragma comment(lib,” Mswsock.lib”)   下面是使用AcceptEx函数的示例代码:   #define STRICT   #define _ WIN32_WINNT...lpfnAcceptEx = NULL;   GUID GuidAcceptEx = WSAID_ACCEPTEX; DWORD dwBytes = 0;   SOCKET ListenSocket...函数指针时,只需要传递给WSAIoctl一个有效的SOCKET即可,该Socket的类型不会影响获取的AcceptEx函数指针。   ...如果不希望AcceptEx建立连接后等待用户发送数据,那么必须将第四个参数设为0。第5、6参数必须是对应SOCKET的地址类型的大小再加上16个字节。

78110

WinSock2 API

这篇博文主要探讨这些函数的用法和他们与传统的巴克利套接字相比更加高效的秘密 AcceptEx 其实在使用TCP协议编程时,接受连接的过程也是需要进行收发包操作的,具体的过程请参考TCP的三次握手。...针对这种特性WinSock提供了对应的异步操作函数AcceptEx。...TCP三次握手中的SYN包和ACK包,这些包的信息需要在函数返回后由用户通过其他方法来解析,而accpet帮我们解析了,所以AcceptEx比accept更加高效 因为AcceptEx的设计目标纯粹就是为了性能...设置了这个参数后,lpvInBuffer参数需要设置成相应函数的GUID,下面列举了各个函数的GUID值 GDUI 函数 WSAID_ACCEPTEX AcceptEx WSAID_CONNECTEX...下面是一个加载AcceptEx函数的例子 typedef BOOL (PASCAL FAR * LPFN_ACCEPTEX)( IN SOCKET sListenSocket, IN SOCKET

1.1K10

关于windows完成端口(IOCP)的一些理解(一)

有,windows提供了一个AcceptEx函数,在创建完侦听函数之后,调用这个函数,那么将来在完成端口的工作线程里面如果有接受新连接动作,则无需调用accept或者AcceptEx,操作系统自动帮你接受新连接...AcceptEx函数签名如下: BOOL AcceptEx( _In_ SOCKET sListenSocket, _In_ SOCKET sAcceptSocket...(GUID) whose value identifies the AcceptEx extension function....代码应该写成这样: // 使用AcceptEx函数, //因为这个是属于WinSock2规范之外的微软另外提供的扩展函数 // 所以需要额外获取一下函数的指针, // 获取AcceptEx函数指针...为将来接受新连接准备: // 为AcceptEx 准备参数,然后投递AcceptEx I/O请求 for( int i=0;i<MAX_POST_ACCEPT;i++ ) { //

6.8K90

windows完成端口(一)

有,windows提供了一个AcceptEx函数,在创建完侦听函数之后,调用这个函数,那么将来在完成端口的工作线程里面如果有接受新连接动作,则无需调用accept或者AcceptEx,操作系统自动帮你接受新连接...AcceptEx函数签名如下: BOOL AcceptEx( _In_ SOCKET sListenSocket, _In_ SOCKET sAcceptSocket...(GUID) whose value identifies the AcceptEx extension function....代码应该写成这样: // 使用AcceptEx函数, //因为这个是属于WinSock2规范之外的微软另外提供的扩展函数 // 所以需要额外获取一下函数的指针, // 获取AcceptEx函数指针...为将来接受新连接准备: // 为AcceptEx 准备参数,然后投递AcceptEx I/O请求 for( int i=0;i<MAX_POST_ACCEPT;i++ ) { //

2.2K50

完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三

AcceptEx比Accept又强大在哪里呢?...是有三点: (1) 这个好处是最关键的,是因为AcceptEx是在客户端连入之前,就把客户端的Socket建立好了,也就是说,AcceptEx是先建立的Socket,然后才发出的AcceptEx...(3) AcceptEx还有一个非常体贴的优点,就是在投递AcceptEx的时候,我们还可以顺便在AcceptEx的同时,收取客户端发来的第一组数据,这个是同时进行的,也就是说,在我们收到AcceptEx...因为我们在未取得函数指针的情况下就调用AcceptEx的开销是很大的,因为AcceptEx 实际上是存在于Winsock2结构体系之外的(因为是微软另外提供的),所以如果我们直接调用AcceptEx的话...获取AcceptEx函数指针的代码大致如下: [cpp] view plain copy LPFN_ACCEPTEX m_lpfnAcceptEx; // AcceptEx

78880

【Windows网络编程】完成端口IOCP介绍(超详细)

AcceptEx比Accept又强大在哪里呢?...是有三点: (1) 这个好处是最关键的,是因为AcceptEx是在客户端连入之前,就把客户端的Socket建立好了,也就是说,AcceptEx是先建立的Socket,然后才发出的AcceptEx...(3) AcceptEx还有一个非常体贴的优点,就是在投递AcceptEx的时候,我们还可以顺便在AcceptEx的同时,收取客户端发来的第一组数据,这个是同时进行的,也就是说,在我们收到AcceptEx...因为我们在未取得函数指针的情况下就调用AcceptEx的开销是很大的,因为AcceptEx 实际上是存在于Winsock2结构体系之外的(因为是微软另外提供的),所以如果我们直接调用AcceptEx的话...// AcceptEx函数指针 GUID GuidAcceptEx = WSAID_ACCEPTEX; // GUID,这个是识别AcceptEx函数必须的 DWORD

1.9K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券