在C++中,setsockopt函數用于設置套接字選項
以下是一個使用setsockopt設置套接字選項級別的示例:
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.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;
}
// 設置套接字選項級別為SOL_SOCKET
int enable_tcp_keepAlive = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &enable_tcp_keepAlive, sizeof(enable_tcp_keepAlive)) == -1) {
std::cerr << "Error setting SO_KEEPALIVE option" << std::endl;
close(sockfd);
return 1;
}
// 設置套接字選項級別為IPPROTO_TCP
int tcp_no_delay = 1;
if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &tcp_no_delay, sizeof(tcp_no_delay)) == -1) {
std::cerr << "Error setting TCP_NODELAY option" << std::endl;
close(sockfd);
return 1;
}
// 其他套接字操作...
close(sockfd);
return 0;
}
在這個示例中,我們首先創建了一個IPv4的TCP套接字。然后,我們使用setsockopt函數分別設置了兩個套接字選項:
SOL_SOCKET,并設置SO_KEEPALIVE選項以啟用TCP?;罟δ?。IPPROTO_TCP,并設置TCP_NODELAY選項以禁用Nagle算法。注意,setsockopt函數的第一個參數是套接字描述符,第二個參數是套接字選項級別,第三個參數是選項名稱,第四個參數是指向選項值的指針,最后一個參數是選項值的長度。