送信バッファー領域または受信バッファー領域の変更などにより、setsockopt(3SOCKET) と getsockopt(3SOCKET) を使用してソケットオプションのいくつかを設定、取得できます。呼び出しの一般的な書式を次に示します。
setsockopt(s, level, optname, optval, optlen);および
getsockopt(s, level, optname, optval, optlen);
場合によっては (バッファーサイズを設定する場合など)、これらの指定がオペレーティングシステムに対する参考情報にしかならない場合があります。値を適切に調整する権限はオペレーティングシステムに与えられています。
表 2-4 に、これらの呼び出しの引数を示します。
表 2-4 setsockopt(3SOCKET) と getsockopt(3SOCKET) の引数
引数 |
説明 |
---|---|
s |
オプションの適用先であるソケット |
level |
sys/socket.h 内の 記号定数 SOL_SOCKET によって示されるプロトコルレベル (ソケットレベルなど) を指定する |
optname |
オプションを指定する、sys/socket.h で定義されている記号定数 |
optval |
オプションの値を示す |
optlen |
オプションの値の長さを示す |
getsockopt(3SOCKET) の場合、optlen は、初期状態では optval によって示される記憶領域のサイズに設定され、最終的に使用された記憶領域の長さに設定されます。
既存ソケットのタイプ (ストリームやデータグラムなど) を決定すると便利な場合があります。inetd(1M) によって呼び出されるプログラムは、SO_TYPE ソケットオプションと getsockopt(3SOCKET) 呼び出しを使用してこの決定を行うことができます。
#include <sys/types.h> #include <sys/socket.h> int type, size; size = sizeof (int); if (getsockopt(s, SOL_SOCKET, SO_TYPE, (char *) &type, &size) <0) { ... }
getsockopt(3SOCKET) のあと、sys/socket.h で定義しているように、type は ソケットタイプの値に設定されます。データグラムソケットの場合、type は SOCK_DGRAM です。