【问题标题】:Does all error codes of WSASend() and WSARecv() means that the socket has disconnected?WSASend() 和 WSARecv() 的所有错误代码是否意味着套接字已断开连接?
【发布时间】:2015-03-08 11:51:02
【问题描述】:

我需要知道使用IOCP时WSASend()WSARecv()WSA_IO_PENDING除外)的错误码是否意味着socket已经断开。大多数错误代码都很明显,但我不确定以下内容:

WSASend()的错误码:

  • WSAEINPROGRESS
  • WSAENOBUFS
  • WSA_OPERATION_ABORTED

WSARecv()的错误码:

  • WSAEFAULT
  • WSAEINPROGRESS

【问题讨论】:

标签: c++ sockets iocp


【解决方案1】:

答案

不,并非所有错误代码都是由于套接字断开造成的。


细化

如果不大声喊出“不,请阅读文档!”,我实际上不确定如何回答这个问题。


例如,WSAEINPROGRESS 表示正在进行另一个阻塞操作 - 因此当前的阻塞操作因此被中止。

WSAEINPROGRESS - 10036

操作正在进行中。

当前正在执行阻塞操作。 Windows 套接字仅允许单个阻塞操作(每个任务或线程)处于未完成状态,并且如果进行了任何其他函数调用(无论它是否引用该套接字或任何其他套接字),该函数都会失败并出现 WSAEINPROGRESS 错误。

【讨论】:

  • 反对者能否澄清这个答案有什么问题? OP 明确表示,他想知道是否所有相关错误代码都表示套接字已断开连接;手册(和这个答案)明确指出事实并非如此。
猜你喜欢
  • 2020-11-05
  • 1970-01-01
  • 2013-12-31
  • 2010-12-20
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
相关资源
最近更新 更多