我创建了一个Win32服务器 - 客户端应用程序,其中许多客户端连接到单个服务器,发送查询和 recv 响应 .
它在许多安装中都能正常工作,但在其他一些安装中关闭了连接 . 客户端和服务器都报告远程主机已关闭连接 . 创建连接后的套接字操作顺序如下:
Client: sends query Q1 (by calling send)
Server: recvs query Q1 and sends R1
Client: recvs R1
Client: sends query Q2
Server: recvs query Q2 and sends R2
Client: recvs R2
and so on
在某些网络中,经过一段时间,例如1小时或10分钟,
Client: Sends Q(n) successfully
Server: recvs SOCKET_ERROR and my code exits thread.
//unexpected
WSAGetLastError() at server returns 10054: An existing connection was forcibly closed by the remote host.
Client: recvs SOCKET_ERROR.
WSAGetLastError() at client also returns 10054
在服务器中,每个客户端都有一个线程 . 服务器在响应之前具有可忽略的延迟 .
为什么服务器端的函数 recv() 返回SOCKET_ERROR?谁关闭了插座?编辑:我更新了问题并将WSAGetLastErrorCode()返回值 . 为什么-1?这个问题出了什么问题?