c++ socket连接超时
时间: 2023-09-03 21:12:24 浏览: 143
在 C++ 中,可以通过设置 socket 的超时时间来实现连接超时功能。下面是一个示例代码,演示如何设置连接超时时间:
```c++
#include <iostream>
#include <winsock2.h> // Windows 平台需要包含该头文件
int main() {
// 初始化 Winsock 库
WSADATA wsaData;
int result = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (result != 0) {
std::cout << "WSAStartup failed: " << result << std::endl;
return 1;
}
// 创建 socket
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == INVALID_SOCKET) {
std::cout << "socket failed: " << WSAGetLastError() << std::endl;
WSACleanup();
return 1;
}
// 设置连接超时时间为 3 秒
int timeout = 3000;
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&timeout, sizeof(timeout));
// 连接服务器
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 服务器 IP
serverAddr.sin_port = htons(12345); // 服务器端口号
result = connect(sock, (sockaddr*)&serverAddr, sizeof(serverAddr));
if (result == SOCKET_ERROR) {
std::cout << "connect failed: " << WSAGetLastError() << std::endl;
closesocket(sock);
WSACleanup();
return 1;
}
// 连接成功
std::cout << "connected to server" << std::endl;
// 关闭 socket
closesocket(sock);
WSACleanup();
return 0;
}
```
在上述代码中,我们使用 `setsockopt` 函数设置了 `SO_RCVTIMEO` 和 `SO_SNDTIMEO` 选项,分别表示接收和发送数据的超时时间。然后在调用 `connect` 函数连接服务器时,如果连接超时,`connect` 函数将返回 `SOCKET_ERROR`,并且可以通过 `WSAGetLastError` 函数获取错误码,从而实现连接超时功能。
阅读全文