【问题标题】:TCP connections with overlapped I/O具有重叠 I/O 的 TCP 连接
【发布时间】:2011-12-04 14:25:35
【问题描述】:

是否可以使用重叠 I/O 发起 TCP 连接请求,并在 Windows 中连接完成之前取消它?我需要至少支持 Windows XP SP2。

【问题讨论】:

    标签: winapi tcp winsock overlapped-io request-cancelling


    【解决方案1】:

    ConnectEx 允许重叠连接尝试。

    要取消这个需要使用CancelIo 传递SOCKET,就好像它是HANDLE(确实如此)。但这必须在调用ConnectEx 的同一线程中完成。管理事物以实现线程特异性并非易事。

    在 XP/2003(即 Vista/2008/8/2008R2)之后,您可以使用来自不同线程的CancelIoExOVERLAPPED 实例用于完全识别 IO 操作)。

    【讨论】:

    • 您也可以通过关闭套接字来取消连接尝试;然后 ConnectEx() 将失败...
    • @Richard:太棒了,谢谢!我将从发出对 ConnectEx() 的调用的同一线程中取消,所以这不会成为问题。但是,有人知道 TCP 级别会发生什么吗?假设 SYN 已发送,取消连接会向对方发送 RST,还是保持握手挂起?
    【解决方案2】:

    来自here

    重叠

    此目录包含一个使用重叠的示例服务器程序 输入/输出。示例程序使用 AcceptEx 函数和重叠 I/O 处理来自客户端的多个异步连接请求 有效。服务器使用AcceptEx函数进行多路复用 单线程 Win32 应用程序中的不同客户端连接。 使用重叠 I/O 可以提高可扩展性。

    【讨论】:

      猜你喜欢
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2010-09-08
      • 1970-01-01
      相关资源
      最近更新 更多