WSAEWOULDBLOCK

WSAEWOULDBLOCK       是非常常见的错误, 意味着请求的操作在调用期间没有足够的时间来完成  
要判断TCP连接是否断开,可以通过以下方法: ```cpp #include <winsock2.h> #include <ws2tcpip.h> #pragma comment(lib, "ws2_32.lib") bool IsTCPDisconnected(SOCKET sock) { char buffer[1]; int result = recv(sock, buffer, sizeof(buffer), MSG_PEEK); if (result == 0) { // 连接已关闭 return true; } else if (result == SOCKET_ERROR) { // 发生错误 int errorCode = WSAGetLastError(); if (errorCode == WSAEWOULDBLOCK || errorCode == WSAECONNRESET) { // 非阻塞套接字返回WSAEWOULDBLOCK,连接被重置返回WSAECONNRESET return true; } } // 连接仍然存在 return false; } int main() { // 初始化Winsock WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { return 1; } // 创建套接字并连接到服务器 SOCKET sock = socket(AF_INET, SOCK_STREAM, 0); sockaddr_in serverAddress; serverAddress.sin_family = AF_INET; serverAddress.sin_port = htons(8080); // 替换为实际的服务器端口号 inet_pton(AF_INET, "127.0.0.1", &(serverAddress.sin_addr)); // 替换为实际的服务器IP地址 if (connect(sock, (sockaddr*)&serverAddress, sizeof(serverAddress)) != 0) { closesocket(sock); WSACleanup(); return 1; } // 使用IsTCPDisconnected函数判断连接是否断开 if (IsTCPDisconnected(sock)) { printf("TCP连接已断开\n"); } else { printf("TCP连接仍然存在\n"); } // 清理资源 closesocket(sock); WSACleanup(); return 0; } ``` 这个示例代码使用了Windows平台下的Winsock库,通过创建套接字并连接到服务器,然后调用`IsTCPDisconnected`函数来判断TCP连接是否断开。`IsTCPDisconnected`函数中使用了`recv`函数的`MSG_PEEK`标志来查看接收缓冲区中的数据,如果返回值为0,则表示连接已关闭;如果返回值为`SOCKET_ERROR`,并且错误码为`WSAEWOULDBLOCK`或`WSAECONNRESET`,则表示连接被重置;否则表示连接仍然存在。注意,在使用Winsock之前,需要调用`WSAStartup`函数来初始化Winsock库,并在使用完后调用`WSACleanup`函数来清理资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值