getsockopt サブルーチン

目的

ソケット上のオプションを取得します。

ライブラリー

標準 C ライブラリー (libc.a)

構文

#include <sys/socket.h>
int getsockopt (Socket, Level, OptionName, OptionValue, OptionLength)
int  Socket,  Level,  OptionName;
void * OptionValue;
socklen_t * OptionLength;

説明

getsockopt サブルーチンにより、アプリケーション・プログラムはソケット・オプションを照会することができます。 呼び出し側プログラムは、ソケットの名前、オプションの名前、および要求された情報を保管する場所を指定します。 オペレーティング・システムは、内部データ構造からソケット・オプション情報を取得し、要求された情報を呼び出し側プログラムに戻します。

オプションは、マルチプロトコル・レベルで存在できます。 これらは常に、最上位のソケット・レベルに存在します。 ソケット・オプションを取得する場合は、オプションが存在するレベルとオプションの名前を指定します。

getsockopt サブルーチンを含むすべてのアプリケーションは、 BSD (_BSD) マクロを特定の値に設定してコンパイルする必要があります。 許容値は 43 および 44 です。 さらに、すべてのソケット・アプリケーションに BSD libbsd.a ライブラリーを組み込む必要があります。

パラメーター

項目 説明
ソケット 固有のソケット名を指定します。
レベル オプションが存在するプロトコル・レベルを指定します。 オプションは、以下のレベルで取得できます。
ソケット・レベル
レベル パラメーターを ソケットの解決 オプションとして指定します。
その他のレベル
オプションを制御するプロトコルの適切なプロトコル番号を指定します。 例えば、オプションが TCP プロトコルによって解釈されることを示すには、 netinet/in.h ファイルで定義されているように、 Level パラメーターを TCP のプロトコル番号に設定します。
OptionName 単一オプションを指定します。 OptionName パラメーターおよび指定されたオプションは、解釈のために適切なプロトコル・モジュールに解釈されずに渡されます。 sys/socket.h ファイルには、ソケット・レベル・オプションの定義が入っています。 netinet/tcp.h ファイルには、TCP プロトコル・レベル・オプションの定義が含まれています。 ソケット・レベルのオプションは、有効または無効にすることができ、トグル方式で動作します。 sys/atmsock.h ファイルには、ATM プロトコル・レベル・オプションの定義が入っています。

以下のリストは、 sys/socket.h ファイルにあるソケット・プロトコル・レベル・オプションを定義しています。

SO_DEBUG
デバッグ情報の記録を指定します。 このオプションによって、基礎になっているプロトコル・モジュールでの デバッグを使用可能または使用不可にすることができます。
SO_BROADCAST
ブロードキャスト・メッセージの伝送がサポートされるかどうかを指定します。 このオプションは、ブロードキャスト・サポートを使用可能または使用不可にします。
SO_CKSUMREV
プロトコル層でのパフォーマンスの向上を可能にします。 プロトコルがこのオプションをサポートしている場合、有効にすると、ユーザーのデータがユーザーのバッファー ( 受信受信元読み取り、または 受信メッセージ スレッド) に移動されるまで、プロトコルはチェックサム検査を据え置きます。 これにより、チェックサム・エラーの場合に、使用可能なデータがないときにアプリケーションがウェイクアップされる可能性があります。 この場合、EAGAIN が戻されます。 このオプションを設定するアプリケーションは、受信呼び出しから戻された EAGAIN エラー・コードを処理する必要があります。
SO_REUSEADDR
バインド サブルーチンによって提供されるアドレスの妥当性検査に使用される規則が、ローカル・ポートの再使用を許可する必要があることを指定します。 特定の IP アドレスは、同じポートに 1 回のみバインドできます。 このオプションは、ローカル・ポートの再使用を有効または無効にします。

SO_USEADDR を使用すると、アプリケーションは、 SO_USEADDR が設定されたソケットのポート/アドレスに対する後続の バインド サブルーチンを明示的に拒否することができます。 これにより、アプリケーションは、他のアプリケーションが バインド サブルーチンとバインドするのをブロックすることができます。

SO_REUSEPORT (使用ポート)
バインド サブルーチンによって提供されるアドレスの妥当性検査に使用される規則が、ローカル・ポート/アドレスの組み合わせの再使用を許可することを指定します。 ポート/アドレスの組み合わせの各バインディングでは、 SO_REUSEPORT (使用ポート) ソケット・オプションを指定する必要があります。 このオプションは、ローカル・ポート/アドレスの組み合わせの再使用を有効または無効にします。
SO_KEEPALIVE
接続されたソケットでの ACK メッセージの定期的伝送を使用可能または使用不可にすることにより、接続のアクティビティーをモニターします。 アイドル・インターバル時間は、TCP/IP いいえ コマンドを使用して指定できます。 切断された接続については、 コミュニケーション・プログラミングの概念"ソケット・タイプとプロトコルについて" で説明しています。
OptionName (続き)
SO_DONTROUTE
出力メッセージが標準ルーティング機能をバイパスする必要があることを示します。 発信メッセージにルーティングを適用しません。 宛先アドレスのネットワーク部分に従って、適切なネットワーク・インターフェースにメッセージを送信します。 このオプションは、発信メッセージのルーティングを有効または無効にします。
SO_LINGER
データが存在する場合は、 閉じる サブルーチンを使用します。 このオプションは、ソケットに対して未送信メッセージ・キューが存在し、プロセスがソケットに対して 閉じる サブルーチンを実行するときに実行されるアクションを制御します。

整数 (SO_LINGER) 型 オプションが設定されている場合、システムは、データを送信できるようになるまで、または時間が経過するまで、 閉じる サブルーチンの処理をブロックします。 整数 (SO_LINGER) 型 オプションが指定されていない場合に、 閉じる サブルーチンが発行されると、システムは、可能な限り迅速にプロセスを続行できるように呼び出しを処理します。

sys/socket.h ファイルは、リンガー時間間隔を指定するための l_linger メンバーを含む linger 構造体を定義します。 リンガー時間が 0 以外に設定されている場合、システムはソケットでキューに入れられたメッセージを送信しようとします。 リンガー ・メンバーに設定できる最大値は 65535 です。 アプリケーションが XPG_SUS_ENV 環境変数をエクスポートして SPEC1170 準拠の動作を要求した場合、リンガー時間は n 秒です。それ以外の場合、リンガー時間は n/100 秒 (ティック) です。ここで、 nl_linger メンバーの値です。

SO_OOBINLINE
受信されたアウト・オブ・バンド・データ (緊急とマークされたデータ) を回線に残します。 このオプションは、アウト・オブ・バンド・データの受信を有効または無効にします。
SO_SNDBUF
バッファー・サイズ情報を検索します。
SO_RCVBUF
バッファー・サイズ情報を検索します。
SO_SNDLOWAT
送信バッファーの最低水準点情報を取得します。
SO_RCVLOWAT
受信バッファーの最低水準点情報を検索します。
OptionName (続き)
SO_SNDTIMEO
タイムアウト情報を取得します。 このオプションは設定可能ですが、現在は使用されていません。
SO_RCVTIMEO
タイムアウト情報を取得します。 このオプションは設定可能ですが、現在は使用されていません。
SO_PEERID
ピアUNIXドメインソケットに関連付けられたプロセスのクレデンシャル情報を取得する。 この情報には、プロセス ID、有効ユーザー ID、および有効グループ ID が含まれます。 資格情報を取得するには、 peercred_struct 構造を使用する必要があります。 この構造は、 sys/socket.h ファイルで定義されます。
SO_ERROR
エラー状況に関する情報を取得し、クリアします。
SO_TYPE
ソケット・タイプの検索を設定します。

以下のリストは、 netinet/tcp.h ファイルにある TCP プロトコル・レベル・オプションを定義しています。

TCP の CWND_IF
輻輳回避中に TCP 輻輳ウィンドウ (cwnd) の係数を増やします。 値は 0 から 100 の範囲でなければなりません (0 は無効)。 tcp_cwnd_modified ネットワーク・チューナブル・オプションを有効にする必要があります。
TCP の CWND_DF
輻輳回避中に TCP cwnd の係数を減らします。 値は 0 から 100 の範囲でなければなりません (0 は無効)。 tcp_cwnd_modified ネットワーク・チューナブル・オプションを有効にする必要があります。
TCP_NOTENTER_SSTART (TCP が開始しない)
再送タイムアウト後にスロー・スタートに再入しないようにします。これにより、現在のスロー・スタートしきい値 (ss_threshold) のサイズ、または最大 cwnd (max cwnd/2) の半分ではなく、cwnd が初期ウィンドウ・サイズにリセットされる可能性があります。 値は、enable の場合は 1、disable の場合は 0 です。 tcp_cwnd_modified ネットワーク・チューナブル・オプションを有効にする必要があります。
TCP_NOREDUCE_CWND_IN_FRXMT
高速再送句では、cwnd サイズを小さくしません。 値は、enable の場合は 1、disable の場合は 0 です。 tcp_cwnd_modified ネットワーク・チューナブル・オプションを有効にする必要があります。
TCP_NOREDUCE_CWND_EXIT_FRXMT
高速再送句の終了時には、cwnd サイズを小さくしません。 値は、enable の場合は 1、disable の場合は 0 です。 tcp_cwnd_modified ネットワーク・チューナブル・オプションを有効にする必要があります。
TCP_RFC1323
指定されたソケットで RFC 1323 が使用可能または使用不可のどちらであるかを示します。 getsockopt サブルーチンによって戻されるゼロ以外の OptionValue は、RFC が使用可能であることを示します。
TCP_NODELAY
TCP がデータを送信するタイミングを決定するために Nagle アルゴリズムに従う必要があるかどうかを指定します。 デフォルトでは、TCP は Nagle アルゴリズムに従います。 この動作を無効にするために、アプリケーションは、 TCP の遅延なし が常にデータを即時に送信するように強制することができます。 getsockopt サブルーチンによって戻されるゼロ以外の OptionValue は、 TCP_NODELAY が使用可能であることを示します。 例えば、要求/応答に TCP を使用するアプリケーションがある場合は、 TCP の遅延なし を使用する必要があります。
OptionName (続き)
「TCP_NODELAYACK」
TCP が即時肯定応答パケットを送信側に送信する必要があるかどうかを指定します。 このオプションが設定されていない場合、TCP は肯定応答パケットの送信を最大 200 ミリ秒遅らせます。 これにより、応答のデータとともに肯定応答を送信することができ、システム・オーバーヘッドを最小限に抑えることができます。 この TCP オプションを設定すると、システム・オーバーヘッドがわずかに増加する可能性がありますが、送信側が受信側の確認応答を待機している場合は、ネットワーク転送のパフォーマンスが向上する可能性があります。

以下のリストは、 sys/atmsock.h ファイルにある ATM プロトコル・レベル・オプションを定義しています。

SO_ATM_パラメーター
すべての ATM パラメーターを検索します。 このソケット・オプションは、以下で説明する個々のソケット・オプションを使用する代わりに使用できます。 sys/call_ie.h ファイルに定義されている connect_ie 構造体を使用します。
SO_ATM_AAL_PARM
ATM AAL (Adaptation Layer) パラメーターを取得します。 sys/call_ie.h ファイルに定義されている aal_parm 構造体を使用します。
SO_ATM_トラフィック・データ
ATM トラフィック記述子の値を検索します。 sys/call_ie.h ファイルに定義されている traffic_desc 構造体を使用します。
_ 翻訳不要 _SO_ATM_BEARER
ATM Bearer 機能情報を取得します。 sys/call_ie.h ファイルに定義されている bearer 構造体を使用します。
SO_ATM_BHLI
ATM ブロードバンド高層情報を検索します。 sys/call_ie.h ファイルに定義されている bhli 構造体を使用します。
SO_ATM_BLLI
ATM ブロードバンド低層情報を取得します。 sys/call_ie.h ファイルに定義されている blli 構造体を使用します。
SO_ATM_QoS
ATM サービスの範囲の値を検索します。 sys/call_ie.h ファイルに定義されている qos_parm 構造体を使用します。
SO_ATM_TRANIT_ゼル
ATM 輸送セレクター・キャリアを取得します。 sys/call_ie.h ファイルに定義されている transit_sel 構造体を使用します。
SO_ATM_MAX_PEND
送信操作の結果としてエラー通知がアプリケーションに戻される前に許可される、未処理の送信バッファーの数を検索します。 このオプションは、非ベスト・エフォート・タイプのバーチャル・サーキットにのみ有効です。
SO_ATM_CAUSE (S)
接続障害の原因を取得します。 sys/call_ie.h ファイルに定義されている cause_t 構造体を使用します。
OptionValue バッファーのアドレスへのポインターを指定します。 OptionValue パラメーターは整数パラメーターを取ります。 OptionValue パラメーターは、ゼロ以外の値に設定してブール・オプションを使用可能にするか、値 0 に設定してオプションを使用不可にする必要があります。 以下のオプションは、同じ方法で有効化および無効化を行います。
  • SO_DEBUG
  • SO_REUSEADDR
  • SO_KEEPALIVE
  • SO_DONTROUTE
  • SO_BROADCAST
  • SO_OOBINLINE
  • TCP_RFC1323
OptionLength OptionValue パラメーターの長さを指定します。 OptionLength パラメーターには、最初は OptionValue パラメーターが指すバッファーのサイズが入っています。 戻り時に、 OptionLength パラメーターは、戻された値の実際のサイズを示すように変更されます。 オプション値が指定されないか、返されない場合、 OptionValue パラメーターは 0 にすることができます。

その他のプロトコル・レベルのオプションは、フォーマットと名前が異なります。

項目 説明
IP ドONTFRAG (IP_DONTFRAG) 現在の IP ドONTFRAG (IP_DONTFRAG) オプション値を取得します。
IP_FINDPMTU 現在の PMTU 値を取得します。
IP_ PMTUAGE 現在の PMTU タイムアウト値を取得します。
項目 説明
IP_DONTGRAG サポートされていません。
IP_FINDPMTU 現在の PMTU 値を取得します。
IP_ PMTUAGE サポートされていません。
項目 説明
IPV6_V6ONLY ソケットが IPv6 通信のみに制限されるかどうかを決定します。
オプション・タイプ:
int (ブール解釈)
  ユーザーがユニキャスト IPv6 パケットの発信ホップ限界値を決定できるようにします。
オプション・タイプ:
int
  ユーザーがマルチキャスト IPv6 パケットの発信ホップ限界値を決定できるようにします。
オプション・タイプ:
int
  発信マルチキャスト・パケットに使用されているインターフェースをユーザーが判別できるようにします。
オプション・タイプ:
unsigned int
  マルチキャスト・データグラムが、送信側ホストが属するグループに送信される場合、データグラムのコピーは、ローカル・デリバリーのために IP レイヤーによってループバックされます (オプションが 1 に設定されている場合)。 このオプションが 0 に設定されている場合、コピーはループバックされません。
オプション・タイプ:
unsigned int
  着信 IPv6 パケットの宛先 IPv6 アドレスおよび着信インターフェース・インデックスが、UDP およびロー・ソケットで補助データとして受信されるかどうかを決定します。
オプション・タイプ:
int (ブール解釈)
  着信 IPv6 パケットのホップ限界が UDP およびロー・ソケットで補助データとして受信されるかどうかを決定します。
オプション・タイプ:
int (ブール解釈)
  着信 IPv6 パケットのトラフィック・クラスが UDP およびロー・ソケットで補助データとして受信されるかどうかを決定します。
オプション・タイプ:
int (ブール解釈)
  着信 IPv6 パケットのルーティング・ヘッダーが UDP およびロー・ソケットで補助データとして受信されるかどうかを決定します。
オプション・タイプ:
int (ブール解釈)
  着信 IPv6 パケットのホップ・バイ・ホップ・オプション・ヘッダーが、UDP およびロー・ソケットで補助データとして受信されているかどうかを判別します。
オプション・タイプ:
int (ブール解釈)
  着信 IPv6 パケットの宛先オプション・ヘッダーが UDP およびロー・ソケットで補助データとして受信されるかどうかを決定します。
オプション・タイプ:
int (ブール解釈)
  このソケットで送信されるすべての IPv6 パケットのソース IPv6 アドレスおよび発信インターフェース・インデックスを決定します。
オプション・タイプ:
netinet/in.h ファイルに定義されている struct in6_pktinfo
  このソケットで発信 IPv6 データグラムに使用されるネクスト・ホップを決定します。
オプション・タイプ:
netinet/in.h ファイルに定義されている struct sockaddr_in6
  このソケット上の発信 IPv6 データグラムのトラフィック・クラスを決定します。
オプション・タイプ:
INT
  このソケットで発信 IPv6 データグラムに使用されるルーティング・ヘッダーを決定します。
オプション・タイプ:
netinet/ip6.h ファイルに定義されている 構造体 ip6_rthdr
  このソケットで発信 IPv6 データグラムに使用されるホップ・バイ・ホップ・オプション・ヘッダーを決定します。
オプション・タイプ:
netinet/ip6.h ファイルに定義されている 構造体 ip6_rthdr
  このソケット上の発信 IPv6 データグラムに使用する宛先オプション・ヘッダーを決定します。 このヘッダーは、ルーティング・ヘッダー (存在する場合) の後に続き、ルーティング・ヘッダーが指定されていない場合にも使用されます。
オプション・タイプ:
netinet/ip6.h ファイルに定義されている 構造体 ip6_dest
  このソケット上の発信 IPv6 データグラムに使用する宛先オプション・ヘッダーを決定します。 このヘッダーは、ルーティング・ヘッダー (存在する場合) の前に置かれます。 ルーティング・ヘッダーが指定されていない場合、このオプションは暗黙的に無視されます。
オプション・タイプ:
netinet/ip6.h ファイルに定義されている 構造体 ip6_dest
  このソケットの IPv6 パス MTU ディスカバリーの制御方法を決定します。
オプション・タイプ:
INT
  発信 IPv6 パケットのフラグメント化がこのソケットで使用不可になっているかどうかを判別します。
オプション・タイプ:
整数 (ブール解釈)
  IPV6_PATHMTU メッセージがこのソケットで補助データとして受信されるかどうかを決定します。
オプション・タイプ:
整数 (ブール解釈)
  ソケットのアドレス選択設定を取得します。
オプション・タイプ:
整数 (ブール解釈)
  接続されたソケットの現行パス MTU を判別します。
オプション・タイプ:
netinet/in.h ファイルに定義されている struct ip6_mtuinfo
項目 説明
IPPROTO_ICMPV6 ユーザーは、 ICMPV6 タイプ・フィールドによって ICMPV6 メッセージをフィルターに掛けることができます。 フィルターが設定されていない場合は、デフォルトのカーネル・フィルターが返されます。
オプション・タイプ:
netinet/icmp6.h ファイルに定義されている icmp6_filter 構造体。

戻り値

正常終了すると、 getsockopt サブルーチンは値 0 を戻します。

getsockopt サブルーチンが失敗すると、サブルーチン・ハンドラーは以下のアクションを実行します。

  • 呼び出し元のプログラムに-1を返す。
  • 特定のエラーを示すエラー・コードを エラー番号 グローバル変数に移動します。

IPPROTO_IP (IP) option IP_ PMTUAGE が正常に完了すると、戻りコードは次のようになります。

AIX®バージョン6.1

  • ゼロ以外の正の OptionValue。

TCP プロトコル・ソケット・オプション IP_FINDPMTU が正常に完了すると、戻りコードは以下のようになります。

AIX バージョン 6.1の場合:

  • OptionValue PMTU ディスカバリー (tcp_pmtu_discover) が使用可能/使用不可の場合は 0。
  • PMTU が使用可能な場合は、ゼロ以外の正の OptionValue 。

エラー・コード

項目 説明
EBADF ソケット パラメーターが有効ではありません。
EFAULT OptionValue パラメーターが指すアドレスが、プロセス・スペースの有効な (書き込み可能な) 部分にないか、または OptionLength パラメーターがプロセス・アドレス・スペースの有効な部分にありません。
EINVAL LevelOptionName、またはOptionLengthが無効です。
エノブフ 呼び出しを完了するための十分なリソースがシステムにありません。
ENOTSOCK ソケット パラメーターは、ソケットではなくファイルを参照します。
ENOPROTOOPT オプションが不明です。
EOPNOTSUPP このオプションは、ソケット・ファミリーまたはソケット・タイプによってサポートされていません。
EPERM ユーザー・アプリケーションには、このソケット・オプションを取得または設定する許可がありません。 ネットワーク・チューナブル・オプションを確認してください。

以下のプログラム・フラグメントは、 getsockopt サブルーチンを使用して既存のソケット・タイプを判別する方法を示しています。

#include <sys/types.h>
#include <sys/socket.h>
int type;
socklen_t size = sizeof(int);
if(getsockopt(s, SOL_SOCKET, SO_TYPE, (void*)&type,&size)<0){
.
.
.
}