C言語 - 標準ライブラリ - sys/socket.h

 クラウディア
1. 概要
2. socket ソケットの作成
3. setsockopt ソケットオプションの設定

1. 概要

 ソケットとは、ここでは、ネットワークソケットのことですな。  ウィキペディアには、残念ながら英語版、「Network socket - Wikipedia」しかありませんでしたが。  イマドキ、ソケットをべたから書く、エンジニアは、あまりいないので、馴染みがないのかしらんと思っております。

2. socket ソケットの作成

 「FreeBSD」のマニュアルでは、「socket」のことを「通信のエンドポイント」と言っておりますな。  『socket() システムコールは、通信のエンドポイントを作成し、記述子を戻します。』と説明されています。

#include <sys/types.h>
#include <sys/socket.h>

int socket(int domain, int type, int protocol);
 第1引数には、『通信を行う、通信ドメイン』を指定します。  いっぱいあるのですが、わたしが、使うのは、下記のものです。
 定数   意味   備考 
PF_INET IPv4 プロトコル
PF_INET6 IPv6 プロトコル

 第2引数には、タイプを指定します。
 これも、いっぱいあるのですが、わたしが、使うのは、下記のものです。

 定数   意味   備考 
SOCK_STREAM ストリーム型ソケット
SOCK_DGRAM データグラム型ソケット

 戻り値は、『ソケットを参照する記述子が戻されます。』
 となっておりますが、「-1」でなければ成功で、その値を使いまわすと認識していれば、まず、間違いありません。

3. setsockopt ソケットオプションの設定

 セットで、「getsockopt」という、オプションを取得する関数もあるのですが、使ったことがありません。

#include <sys/types.h>
#include <sys/socket.h>

int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
 第1引数は、前項で作成した、ソケットを指定します。  第2引数は、「SOL_SOCKET」以外、使ったことがありません。  第3引数もあまり意識したことはないですが、ブロードキャストアドレスを使う際に、「SO_BROADCAST」を指定します。  第4引数と第5引数はセットになっていて、設定したオプションが設定されたのち返ってくるものをいれるアドレスとそのサイズになっています。  第2、第3を「SOL_SOCKET」「SO_BROADCAST」とした場合、第4に「int」の変数のアドレスをいれて、第5に「sizeof(変数)」とします。