Linuxでgetsockopt関数の使い方は何ですか?

Linuxにおいて、`getsockopt()`は、ソケットオプションの値を取得するためのシステムコール関数です。そのプロトタイプは以下の通りです。

#include <sys/socket.h>

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


以下,パラメータの意味は次のとおりです:

sockfd:套接字文件描述符,指定要获取选项的套接字。

level:选项所属的协议层级,常见的值有 SOL_SOCKET(通用套接字选项)和 IPPROTO_TCP(TCP协议选项)等。

optname:选项的名称,表示您要获取的具体选项。

optval:指向存储选项值的缓冲区的指针。

optlen:指向一个整数的指针,用于指定缓冲区的大小,并返回实际选项数据的长度。


`getsockopt()` 関数は、渡された `sockfd`、`level` 、`optname` パラメータを使用して、対応するオプションの現在の値を取得し、それを `optval` が指定するバッファに格納します。呼び出しに成功すると、0 が返され、それ以外の場合は -1 が返され、対応するエラーコードが設定されます。

以下は使用例の単純な例です。

#include <stdio.h>

#include <stdlib.h>

#include <sys/socket.h>

int main() {

int sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd == -1) {

perror(“socket”);

exit(1);

}

int option;

socklen_t option_len = sizeof(option);

// 获取套接字的 SO_REUSEADDR 选项值

if (getsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &option, &option_len) == -1) {

perror(“getsockopt”);

exit(1);

}

printf(“SO_REUSEADDR: %d\n”, option);

close(sockfd);

return 0;

}


こちらのサンプルコードでは、ソケットを作成し、 `getsockopt()` 関数を使用して `SO_REUSEADDR` オプションの現在の値を取得しています。その値を参照用に出力しています。具体的な要件やオプション名に合わせて適宜調整してください。

bannerAds