setsockopt函數用于設置套接字選項。它的原型如下:
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
參數說明:
sockfd:需要設置選項的套接字描述符。
level:選項所屬的協議層。常用的有SOL_SOCKET(通用套接字選項)和IPPROTO_TCP(TCP協議選項)。
optname:選項名稱,可以是以下常用選項之一:
SO_REUSEADDR:允許重用本地地址和端口。
SO_KEEPALIVE:啟用TCP的keepalive機制。
TCP_NODELAY:禁用Nagle算法,提高數據傳輸的實時性。
optval:指向存放選項值的緩沖區。
optlen:選項值的長度。
示例代碼如下:
#include <sys/types.h>
#include <sys/socket.h>
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
perror("socket");
return -1;
}
// 設置SO_REUSEADDR選項
int reuse = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1) {
perror("setsockopt");
return -1;
}
// 設置SO_KEEPALIVE選項
int keepalive = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &keepalive, sizeof(keepalive)) == -1) {
perror("setsockopt");
return -1;
}
// 設置TCP_NODELAY選項
int nodelay = 1;
if (setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay)) == -1) {
perror("setsockopt");
return -1;
}
// 其他操作...
return 0;
}
上述代碼創建了一個TCP套接字,并分別設置了SO_REUSEADDR、SO_KEEPALIVE和TCP_NODELAY三個選項。如果設置選項失敗,會輸出錯誤信息并返回-1。