setsockopt
是 C++ 中用于设置套接字选项的函数
#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
int main() {
int sockfd; // 创建套接字
struct sockaddr_in server_addr; // 服务器地址结构体
// 创建套接字并绑定到服务器地址
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
std::cerr << "Error creating socket" << std::endl;
return 1;
}
server_addr.sin_family = AF_INET; // IPv4
server_addr.sin_port = htons(8080); // 端口号
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 服务器 IP 地址
if (bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
std::cerr << "Error binding socket" << std::endl;
return 1;
}
// 设置套接字选项:接收缓冲区大小
int recv_buffer_size = 4096;
if (setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &recv_buffer_size, sizeof(recv_buffer_size)) < 0) {
std::cerr << "Error setting receive buffer size" << std::endl;
return 1;
}
// 设置套接字选项:发送缓冲区大小
int send_buffer_size = 4096;
if (setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &send_buffer_size, sizeof(send_buffer_size)) < 0) {
std::cerr << "Error setting send buffer size" << std::endl;
return 1;
}
// 其他套接字操作...
close(sockfd); // 关闭套接字
return 0;
}
在这个示例中,我们首先创建了一个套接字并将其绑定到服务器地址。然后,我们使用 setsockopt
函数设置了接收和发送缓冲区的大小。请注意,setsockopt
的第一个参数是套接字级别(SOL_SOCKET
表示套接字级别),第二个参数是选项名称(例如 SO_RCVBUF
和 SO_SNDBUF
分别表示接收和发送缓冲区大小),第三个参数是指向选项值的指针,第四个参数是选项值的大小,最后一个参数是选项值的大小。
这只是一个简单的示例,您可以根据需要设置其他套接字选项。要了解可用的套接字选项,请参阅 socket(7) 文档。