getsockopt()関数のLinuxにおける使用方法を教えてください。

getsockopt() 関数は、ソケットオプションの値を取得するために使用されます。

関数のプロトタイプは以下のとおりです。

int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);

オプションの説明:

  1. sockfd:ソケットファイル記述子
  2. レベル:プロトコル層、SOL_SOCKETやIPPROTO_TCPなどがよく使われる。
  3. optnameは、SO_KEEPALIVE や SO_RCVBUF などのソケットオプション定数である可能性のある、オプション名です。
  4. optval:オプション値を受け取るためのバッファを指します。
  5. optlen:整数で、optvalバッファの長さです。呼び出すときはoptvalバッファのサイズが格納されており、戻ると実際に取得したオプション値の長さが格納されます。

サンプルコード:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
int main() {
int sockfd, optval;
socklen_t optlen;
// 创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
perror("socket");
exit(1);
}
// 获取TCP_NODELAY选项的值
optlen = sizeof(optval);
if (getsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &optval, &optlen) == -1) {
perror("getsockopt");
exit(1);
}
printf("TCP_NODELAY option value: %d\n", optval);
// 关闭套接字
close(sockfd);
return 0;
}

提示のコードでは、ソケットを作成し、getsockopt() 関数を使用して TCP_NODELAY オプションの値を取得しています。TCP オプションを使用するため、ヘッダーファイル <netinet/tcp.h> が必要です。

bannerAds