WSASend() 和 WSARecv() 的所有错误代码是不是意味着套接字已断开连接?
Posted
技术标签:
【中文标题】WSASend() 和 WSARecv() 的所有错误代码是不是意味着套接字已断开连接?【英文标题】: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
【问题讨论】:
您可能需要检查a list of the Winsock error codes,以及阅读WSASend
和WSARecv
的引用。
【参考方案1】:
答案
不,并非所有错误代码都是由于套接字断开造成的。
细化
如果不大声喊出“不,请阅读文档!”,我实际上不确定如何回答这个问题。
msdn.microsoft.com - Windows Sockets Error Codes例如,WSAEINPROGRESS
表示正在进行另一个阻塞操作 - 因此当前的阻塞操作因此被中止。
WSAEINPROGRESS
- 10036操作正在进行中。
当前正在执行阻塞操作。 Windows 套接字仅允许单个阻塞操作(每个任务或线程)处于未完成状态,并且如果进行了任何其他函数调用(无论它是否引用该套接字或任何其他套接字),该函数都会失败并出现 WSAEINPROGRESS 错误。
【讨论】:
反对者能否澄清这个答案有什么问题? OP 明确表示,他想知道是否所有相关错误代码都表示套接字已断开连接;手册(和这个答案)明确指出事实并非如此。以上是关于WSASend() 和 WSARecv() 的所有错误代码是不是意味着套接字已断开连接?的主要内容,如果未能解决你的问题,请参考以下文章
我应该为 WSASend 和 WSARecv 使用不同的 WSAOVERLAPPED 结构吗?
io 完成端口问题,每个 GetQueuedCompletionStatus 调用多个 wsarecv 或 wsasend