在C++中,使用setsockopt()
函數可以設置套接字的選項,包括超時。為了設置套接字超時,您需要將SO_RCVTIMEO
(接收超時)和/或SO_SNDTIMEO
(發送超時)選項設置為所需的超時值。超時值是以毫秒為單位的,您需要將其轉換為對應的毫秒數。
以下是一個使用setsockopt()
設置套接字超時的示例:
#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
std::cerr << "Error creating socket" << std::endl;
return 1;
}
// 設置接收超時
int recv_timeout = 5000; // 5秒
int recv_timeout_val = recv_timeout * 1000; // 轉換為毫秒
if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &recv_timeout_val, sizeof(recv_timeout_val)) == -1) {
std::cerr << "Error setting receive timeout" << std::endl;
close(sockfd);
return 1;
}
// 設置發送超時
int send_timeout = 5000; // 5秒
int send_timeout_val = send_timeout * 1000; // 轉換為毫秒
if (setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, &send_timeout_val, sizeof(send_timeout_val)) == -1) {
std::cerr << "Error setting send timeout" << std::endl;
close(sockfd);
return 1;
}
// 其他套接字操作...
close(sockfd);
return 0;
}
在這個示例中,我們首先創建了一個套接字,然后分別設置了接收超時和發送超時為5秒。注意,我們將超時值從秒轉換為毫秒,因為setsockopt()
函數接受的參數是以毫秒為單位的。最后,我們關閉了套接字。