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

WinSock 重叠IO模型

现在摆在面前的就是如何高效的读写数据,与磁盘操作做类比,当接收到WSAAsyncSelect对应的消息或者WSAEvent返回时就是执行读写操作的时机,下面紧接着就是调用对应的读写函数来进行读写数据了,而联想到linux...ReadFile和WriteFile来支持重叠IO,但是WinSock2.0 中重新设计的一套函数来支持重叠IO WSASend (send的等价函数) WSASendTo (sendto的等价函数) WSARecv...利用该模型首先需要把一个event对象绑定到OVERLAPPED(WinSokc中一般是WSAOVERLAPPED)上,然后利用这个OVERLAPPED结构来进行IO操作.如:WSASend/WSARecv...这主要是因为对于每个重叠I/O操作(WSASend/WSARecv等)来说,都必须额外创建一个Event对象。对于一个I/O密集型SOCKET应用来说,这种消耗会造成资源的严重浪费。...在循环中接收连接,当有新客户端连接进来时创建对应的客户端结构,然后调用WSARecv函数接收数据,接下来就是使用SleepEx进入可警告状态,以便让完成历程有机会执行。

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

WinSock Socket 池

WSABUF 参数 在WSASend 和WSARecv的参数中总有一个WSABUF的参数,这个参数很简单的就只有一个缓冲区指针和缓冲区长度,加上函数后面表示WSABUF的个数的参数,很容易想到这些函数可以发送...作为WSASend、WSASendto、WSARecv、WSARecvFrom等函数的数组参数,最终WSABUF数组可以描述多个分散的缓冲块用于收发。...的信息,注意这里在提交WSARecv时给的缓冲是NULL,这里表示我只需要一个完成的通知,在完成收到客户端数据后会触发FD_READ,而不需要进行数据的写入,一般在提交WSARecv后,系统内核会锁住我们提供的...特别是在服务端需要频繁的调用WSASend、WSARecv这样的操作,如果每一个都锁定一定的缓冲,这个内存消耗也是惊人的。所以这里传入NULL,只让其进行事件通知,而写入的操作由程序自己做。...比如在WSARecv的完成通知中,将接收到的缓冲直接传递给QueueUserWorkItem线程池方法,启动线程池中的线程去处理数据,而IOCP线程池则继续专心于网络服务。

1.2K10
领券