setsockopt サブルーチン
目的
ソケットオプションを設定する。
ライブラリー
標準 C ライブラリー (libc.a)
構文
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
#include <sys/atmsock.h> /*Needed for SOCK_CONN_DGRAM socket type
only*/ (Socket, Level, OptionName, OptionValue, OptionLength)
int Socket, Level, OptionName;
const void * OptionValue;
socklen_t OptionLength;
説明
setsockopt サブルーチンは、ソケットに関連したオプションを設定します。 オプションは、マルチプロトコル・レベルで存在できます。 オプションは常に、最上位のソケット・レベルで表示されます。
setsockopt サブルーチンは、ソケット通信を制御する手段をアプリケーション・プログラムに提供します。 アプリケーション・プログラムは、 setsockopt サブルーチンを使用して、プロトコル・レベルでのデバッグ、バッファー・スペースの割り振り、タイムアウトの制御、またはソケット・データ・ブロードキャストの許可を行うことができます。 /usr/include/sys/socket.h ファイルは、 setsockopt サブルーチンで使用可能なすべてのオプションを定義します。
ソケット・オプションを設定する場合は、オプションが存在するプロトコル・レベルとオプションの名前を指定します。
パラメーター OptionValue および OptionLength を使用して、 setsockopt サブルーチンのオプション値にアクセスします。 これらのパラメーターは、要求されたオプションの値が戻されるバッファーを識別します。
setsockopt サブルーチンを含むすべてのアプリケーションは、特定の値に設定された _BSD マクロを使用してコンパイルする必要があります。 許容値は 43 および 44 です。 さらに、すべてのソケット・アプリケーションに BSD libbsd.a ライブラリーを組み込む必要があります。
パラメーター
| 項目 | 説明 |
|---|---|
| ソケット | 固有のソケット名を指定します。 |
| レベル | オプションが存在するプロトコル・レベルを指定します。 オプションを次のように設定します。
|
| OptionName | 設定するオプションを指定します。 OptionName パラメーターおよび指定されたオプションは、解釈のために適切なプロトコル・モジュールに解釈されずに渡されます。 sys/socket.h ファイルは、ソケット・プロトコル・レベル・オプションを定義します。 netinet/tcp.h ファイルは、TCP プロトコル・レベル・オプションを定義します。 ソケット・レベルのオプションは、使用可能または使用不可にすることができます。これらのオプションはトグル方式で動作します。 以下のリストは、 sys/socket.h ファイルにあるソケット・プロトコル・レベル・オプションを定義しています。
|
| OptionName |
|
| OptionName | 以下のリストは、 netinet/tcp.h ファイルにある TCP プロトコル・レベル・オプションを定義しています。
|
| OptionName |
TCP プロトコル・レベルのソケット・オプションは、listen ソケットから新規ソケットに継承されます。 以下のリストは、 sys/atmsock.h ファイルにある ATM プロトコル・レベル・オプションを定義しています。
|
| OptionName |
以下のリストは、 netinet/sctp.h ファイルにある IPPROTO_TCP プロトコル・レベル・オプションを定義しています。
|
| OptionValue | OptionValue パラメーターは Int パラメーターを取ります。 ブール・オプションを有効にするには、 OptionValue パラメーターをゼロ以外の値に設定します。 オプションを使用不可にするには、 OptionValue パラメーターを 0 に設定します。 以下のオプションは、同じ方法で有効化および無効化を行います。
|
| OptionLength | OptionLength パラメーターには、 OptionValue パラメーターが指すバッファーのサイズが入っています。 |
その他のプロトコル・レベルのオプションは、フォーマットと名前が異なります。
| 項目 | 説明 |
|---|---|
| IP_DONTFRAG (IP_DONTFRAG) | IP ヘッダー内のすべてのパケットに対して、これ以降の DF ビットをオンに設定します。 パス MTU の減少を検出するために、UDP アプリケーションは IP_DONTFRAG オプションを使用します。 |
| IP_FINDPMTU (IP_FINDPMTU) | このパスの PMTU ディスカバリーを有効/無効に設定します。 ディスカバリーを実行するには、プロトコル・レベル・パス MTU ディスカバリーを有効にする必要があります。 |
| IP_PMTUAGE (IP_PMTUAGE) | PMTU の経過時間を設定します。 セッションの PMT 削減ディスカバリーの頻度を指定します。 0 (ゼロ) に設定すると、無限存続期間が暗黙指定され、PMTU 削減ディスカバリーは試行されません。 これにより、以前に設定された PMTU 経過時間が置き換えられます。 新しい PMTU 経過時間は、現在設定されているタイマーの有効期限が切れた後に有効になります。 現在、UDP アプリケーションは PMTU の減少を即時に検出するように IP_DONTFRAG ソケットを設定する必要があるため、このオプションは使用されません。 |
| IP_TTL (IP_TTL) | すべてのパケットの IP ヘッダーに存続時間フィールドを設定します。 ただし、ロー・ソケットの場合は、 setsockopt サブルーチンを使用して設定された値に関係なく、メッセージの送信時にデフォルトの MAXTTL 値が使用されます。 |
| IP_HDRINCL (IP_HDRINCL) | このオプションにより、ユーザーは独自の IP ヘッダーを作成できます。 これは、完全な IP ヘッダーがデータに組み込まれ、ロー・ソケットにのみ使用できることを示します。 |
| IP_ADD_MEMBERSHIP | ip_mreq 構造体タイプの OptionValue パラメーターで指定されたマルチキャスト・グループを結合します。 |
| IP_DROP_MEMBERSHIP | マルチキャスト・グループを、 ip_mreq 構造体タイプの OptionValue パラメーターで指定されたままにします。 |
| IP_MULTICAST_IF | ip_addr 構造体タイプの OptionValue パラメーターで指定されたインターフェースで、マルチキャスト・メッセージの送信を許可します。 INADDR_ANY (0x000000000) のアドレスは、マルチキャスト・オプションで以前に選択されたインターフェースを除去します。 インターフェースが指定されていない場合は、デフォルト経路に至るインターフェースが使用されます。 |
| IP_MULTICAST_LOOP | マルチキャスト・ループバックを設定し、送信されたメッセージが送信側ホストに配信されるかどうかを決定します。 char 型の OptionValue パラメーターは、ループバックのオン/オフを制御します。 |
| IP_MULTICAST_TTL | マルチキャスト・パケットの存続時間 (TTL) を設定します。 char 型の OptionValue パラメーターは、0 から 255 の範囲の TTL の値を設定します。 |
| IP_BLOCK_SOURCE | 特定のソースから特定のグループへのデータをブロックします。 |
| IP_UNBLOCK_SOURCE | ブロックされたソースを非ブロック化します ( IP_BLOCK_SOURCE 操作を元に戻すため)。 |
| IP_ADD_SOURCE_MEMBERSHIP | ソース固有のマルチキャスト・グループを結合します。 ホストがグループのメンバーである場合は、ソースからのデータを受け入れます。そうでない場合は、グループに参加して、指定されたソースからのデータを受け入れます。 |
| IP_DROP_SOURCE_MEMBERSHIP | ソース固有のマルチキャスト・グループを終了します。 指定されたマルチキャスト・グループ・リストからソースをドロップします。 特定のグループのすべてのソースをドロップするには、 IP_DROP_MEMBERSHIP ソケット・オプションを使用します。 |
| 項目 | 説明 | 値 | |
|---|---|---|---|
| IPPROTO_IPV6 | AF_INET6 ソケットを IPv6 通信のみに制限します。 |
|
|
| ユーザーがユニキャスト IPv6 パケットの発信ホップ限界を設定できるようにします。 |
|
||
| ユーザーがマルチキャスト IPv6 パケットの発信ホップ限界を設定できるようにします。 |
|
||
| 発信マルチキャスト・パケットに使用されるインターフェースをユーザーが指定できるようにします。 0 を指定すると、システムは発信インターフェースを選択します。 |
|
||
| マルチキャスト・データグラムが、送信側ホストが属するグループに送信される場合、データグラムのコピーは、ローカル・デリバリーのために IP レイヤーによってループバックされます (オプションが 1 に設定されている場合)。 このオプションが 0 に設定されている場合、コピーはループバックされません。 |
|
||
| 指定されたローカル・インターフェース上のマルチキャスト・グループを結合します。 インターフェース・インデックスが 0 に指定されている場合、カーネルはローカル・インターフェースを選択します。 |
|
||
| 指定されたインターフェースにマルチキャスト・グループを残します。 |
|
||
| カーネルが、データに対してチェックサムを計算し、ロー・ソケットに対して pseudo-IPv6 ヘッダーを計算することを指定します。 カーネルは、発信パケットのチェックサムを計算し、そのソケット上の着信パケットのチェックサムを検証します。 正しくないチェックサムを持つ着信パケットは廃棄されます。 このオプションはデフォルトで無効になっています。 |
|
||
| UDP ソケットおよびロー・ソケットで、着信 IPv6 パケットの宛先 IPv6 アドレスおよび着信インターフェース・インデックスを補助データとして受信します。 |
|
||
| 着信 IPv6 パケットのホップ限界を、UDP およびロー・ソケット上の補助データとして受信します。 |
|
||
| 着信 IPv6 パケットのトラフィック・クラスが、UDP およびロー・ソケットで補助データとして受信されるようにします。 |
|
||
| 着信 IPv6 パケットのルーティング・ヘッダー (ある場合) を、UDP ソケットおよびロー・ソケットで補助データとして受信します。 |
|
||
| 着信 IPv6 パケットのホップ・バイ・ホップ・オプション・ヘッダー (ある場合) が、UDP ソケットおよびロー・ソケットで補助データとして受信されるようにします。 |
|
||
| 着信 IPv6 パケットの宛先オプション・ヘッダー (ある場合) を、UDP ソケットおよびロー・ソケットで補助データとして受信します。 |
|
||
| このソケットで送信されるすべての IPv6 パケットのソース IPv6 アドレスと発信インターフェース・インデックスを設定します。 このオプションは、 ipi6_addr が in6addr_any で ipi6_ifindex が 0 の通常の setsockopt を実行することによってクリアできます。 |
|
||
| このソケット上の発信 IPv6 データグラムのネクスト・ホップを設定します。 このオプションは、長さが 0 の通常の setsockopt を実行することによってクリアできます。 この場合でも、オプション値に対してメモリー・ポインターを指定する必要があることに注意してください。 |
|
||
| このソケット上の発信 IPv6 データグラムのトラフィック・クラスを設定します。 このオプションをクリアするには、アプリケーションは値として-1を指定できる。 |
|
||
| このソケット上の発信 IPv6 データグラムに使用されるルーティング・ヘッダーを設定します。 このオプションは、長さが 0 の通常の setsockopt を実行することによってクリアできます。 この場合でも、オプション値に対してメモリー・ポインターを指定する必要があることに注意してください。 |
|
||
| このソケット上の発信 IPv6 データグラムに使用されるホップ・バイ・ホップ・オプション・ヘッダーを設定します。 このオプションは、長さが 0 の通常の setsockopt を実行することによってクリアできます。 この場合でも、オプション値に対してメモリー・ポインターを指定する必要があることに注意してください。 |
|
||
| このソケット上の発信 IPv6 データグラムに使用される宛先オプション・ヘッダーを設定します。 このヘッダーは、ルーティング・ヘッダー (存在する場合) の後に続き、ルーティング・ヘッダーが指定されていない場合にも使用されます。 このオプションは、長さが 0 の通常の setsockopt を実行することによってクリアできます。 この場合でも、オプション値に対してメモリー・ポインターを指定する必要があることに注意してください。 |
|
||
| このソケット上の発信 IPv6 データグラムに使用される宛先オプション・ヘッダーを設定します。 このヘッダーは、ルーティング・ヘッダー (存在する場合) の前に置かれます。 ルーティング・ヘッダーが指定されていない場合、このオプションは暗黙的に無視されます。 このオプションは、長さが 0 の通常の setsockopt を実行することによってクリアできます。 この場合でも、オプション値に対してメモリー・ポインターを指定する必要があることに注意してください。 |
|
||
| IPv6 パス MTU ディスカバリーを制御するために、このオプションを設定します。 |
|
||
| このオプションを設定すると、このソケットでの発信 IPv6 パケットのフラグメント化が防止されます。 発信インターフェース MTU より大きいパケットが送信されると, そのパケットは破棄されます。 |
|
||
| このオプションを設定することにより、 IPV6_PATHMTU 補助データ項目の受信を使用可能にします。 |
|
||
| このソケットのアドレス選択設定を指定します。 |
|
||
| group_req 構造体の OptionValue パラメーターで指定されたマルチキャスト・グループを結合します。 指定されたインターフェース・インデックスが 0 の場合、カーネルはデフォルト・インターフェースを選択します。 |
|
||
| マルチキャスト・グループを、 group_req 構造体の OptionValue パラメーターで指定されたままにします。 |
|
||
| 指定されたソースから指定されたマルチキャスト・グループへのデータをブロックします。 |
|
||
| 指定されたソースから指定されたマルチキャスト・グループへのデータのブロックを解除します。 このオプションは、 MCAST_BLOCK_SOURCE 操作を元に戻すために使用されます。 |
|
||
| ソース固有のマルチキャスト・グループを結合します。 ホストが既にグループのメンバーである場合は、指定されたソースからのデータを受け入れます。そうでない場合は、グループに参加して、指定されたソースからのデータを受け入れます。 |
|
||
| ソース固有のマルチキャスト・グループを終了します。 指定されたマルチキャスト・グループから指定されたソースを残します。 マルチキャスト・グループのすべてのソースを残すには、 IPV6_LEAVE_GROUP または MCAST_LEAVE_GROUP ソケット・オプションを使用します。 |
|
||
| 項目 | 説明 | 値 |
|---|---|---|
| IPPROTO_ICMPV6 | ユーザーが ICMPV6 メッセージを ICMPV6 タイプ・フィールドでフィルターに掛けることができるようにします。 既存のフィルターをクリアするには、長さをゼロにして setsockopt 呼び出しを発行します。 |
|
tcp.h:#define TCP_ACLFLUSH 0x21 /* clear all DACinet ACLs */
tcp.h:#define TCP_ACLCLEAR 0x22 /* clear DACinet ACL */
tcp.h:#define TCP_ACLADD 0x23 /* Add to DACinet ACL */
tcp.h:#define TCP_ACLDEL 0x24 /* Delete from DACinet ACL */
tcp.h:#define TCP_ACLLS 0x25 /* List DACinet ACL */
tcp.h:#define TCP_ACLBIND 0x26 /* Set port number for TCP_ACLLS */
tcp.h:#define TCP_ACLGID 0x01 /* ID being added to ACL is a GID */
tcp.h:#define TCP_ACLUID 0x02 /* ID being added to ACL is a GID */
tcp.h:#define TCP_ACLSUBNET 0x04 /* address being added to ACL is a subnet */
tcp.h:#define TCP_ACLDENY 0x08 /* this ACL entry is for denying access */戻り値
正常終了時には値 0 が返されます。
setsockopt サブルーチンが失敗すると、サブルーチン・ハンドラーは以下の関数を実行します。
- 呼び出し元のプログラムに-1を返す。
- 特定のエラーを示すエラー・コードを errno グローバル変数に移動します。
エラー・コード
| 項目 | 説明 |
|---|---|
| EBADF | Socket パラメーターが有効ではありません。 |
| EFAULT | Address パラメーターは、ユーザー・アドレス・スペースの書き込み可能部分にはありません。 |
| EINVAL | OptionValue パラメーターまたは OptionLength パラメーターが無効であるか、ソケットがシャットダウンされました。 |
| ENOBUFS | 内部データ構造用のメモリーが不足しています。 |
| ENOTSOCK | Socket パラメーターは、ソケットではなくファイルを参照します。 |
| ENOPROTOOPT | オプションが不明です。 |
| EOPNOTSUPP | このオプションは、ソケット・ファミリーまたはソケット・タイプによってサポートされていません。 |
| EPERM | ユーザー・アプリケーションには、このソケット・オプションを取得または設定する許可がありません。 ネットワーク・チューナブル・オプションを確認してください |
例
- ソケットにブロードキャストのマークを付けるには、以下のようにします
int on=1; setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on)); - TCP_NODELAYACK オプションをオンにするには、以下を実行します。
int on=1; setsockopt(s, IPPROTO_TCP, TCP_NODELAYACK, &on, sizeof(on));