IO 完成端口和套接字 send()

IO Completion Ports and socket send()

根据我目前对 IOCP 的理解,当我创建一个完成端口并将一个套接字关联到它时,当一个套接字准备好被读取时,将向完成端口发送一个通知。

但是send()是怎么处理的,我的意思是如果我想发送数据,我应该直接调用send()吗?完成端口怎么样,它是否收到有关 send() 的任何通知?

Based on my understanding so far of IOCP, when I create a completion port and associate a socket to it, a notification will be sent to the completion port when a socket is ready to be read.

不! IOCP 机制的一个优点是您可以将 read/write 请求与相关缓冲区排队到内核,并让内核线程池在内核状态下执行 IO 操作。这是一个 I/O 完成端口,即。操作完成后您会收到通知。

如果是读取,您将获得缓冲区(指针),返回已加载的数据 - 您不必再次显式 read/copy 它。

如果是写入,则数据已经消失并且您返回的缓冲区(指针)。可以自由 deleted/reused/repooled/whatever.