IOCP怎么正确关闭socket

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOCP怎么正确关闭socket相关的知识,希望对你有一定的参考价值。

参考技术A 你可以用异步的IO模式,比如select模式,overlappped模式,事件模式,甚至IOCP。这样就不会存在recv被卡住的问题了,性能也极大的提高。同步的recv返回0,表示连接正常关闭, 你想让recv返回0却保持连接这是很难的。

将 SslStream 与 IOCP 一起使用

【中文标题】将 SslStream 与 IOCP 一起使用【英文标题】:Using SslStream with IOCP 【发布时间】:2009-08-11 19:06:28 【问题描述】:

我使用 Socket 类的异步/IOCP 方法,BeginSend()/BeginRead()/等编写了一个 TCP 服务器。我想使用 SslStream 添加 SSL 功能,但从界面看来 Socket 和 SslStream 并不打算一起工作,特别是因为我根本没有使用 Streams 并且 SslStream 似乎依赖于使用 Stream .

这可能吗,还是我找错地方了?我是否需要制作自己的 Stream 子类来输入我的 Socket 实例并指向 SslStream ?由于扩展问题,我的服务器使用 IOCP 对我来说很重要。

【问题讨论】:

【参考方案1】:

将您的 Socket 包装在 NetworkStream 中,以便与 SslStream 一起使用。

Socket socket;
...
using (var networkStream = new NetworkStream(socket, true))
using (var sslStream = new SslStream(networkStream, ...))

   // use sslStream.BeginRead/BeginWrite here

Streams 也公开 BeginRead/BeginWrite 方法,因此您不会失去这一方面。

【讨论】:

以上是关于IOCP怎么正确关闭socket的主要内容,如果未能解决你的问题,请参考以下文章

发送后如何正确关闭套接字(使用 IOCP)?

怎么在服务器端关闭websocket连接

IOCP 的内存使用情况[关闭]

关闭和清理 Socket 连接的正确方法是啥?

ServerSocket卡在accept的时候怎么正确关闭

TCP Socket 未正确关闭