setsockopt() - ソケットに関連したオプションの設定

標準

標準/拡張機能 C/C++ 依存項目

XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

X/Open:
#define _XOPEN_SOURCE_EXTENDED 1
#include <sys/socket.h>

int setsockopt(int socket, int level, int option_name,
               const void *option_value, socklen_t option_length);
バークレー・ソケット:
#define _OE_SOCKETS
#include <sys/types.h>
#include <sys/socket.h>

int setsockopt(int socket, int level, int option_name,
               char *option_value, int *option_length);
IPv6: IPv6 ソケット・オプションに対するサポートを組み込むには、次のコードを追加してください。
#define _OPEN_SYS_SOCK_IPV6 1
#include <netinet/in.h>
ip_mreq 構造体: プログラムに ip_mreq 構造体をインクルードするには、次のコードを追加してください。
#define _XOPEN_SOURCE  500
#include <netinet/in.h>
or
#define _OPEN_SYS_SOCK_EXT3
#include <netinet/in.h>
group_req 構造体: プログラムに group_req 構造体をインクルードするには、次のコードを追加してください。
#define _OPEN_SYS_SOCK_EXT3
#include <netinet/in.h>
group_source_req 構造体: プログラムに group_source_req 構造体をインクルードするには、次のコードを追加してください。
#define _OPEN_SYS_SOCK_EXT3
#include <netinet/in.h>
ipv6_mreq 構造体: プログラムに ipv6_mreq 構造体をインクルードするには、次のコードを追加してください。
#define _OPEN_SYS_SOCK_IPV6
#include <netinet/in.h>
icmp6_filter 構造体: プログラムに icmp6_filter 構造体をインクルードするには、次のコードを追加してください。
#define _OPEN_SYS_SOCK_IPV6
#include <netinet/icmp6.h>

機能説明

setsockopt() 関数は、ソケットと関連したオプションを 設定します。オプションは、マルチプロトコル・レベルで存在できます。
パラメーター
説明
socket
ソケット記述子。
level
オプションが設定中のレベル。
option_name
指定ソケット・オプションの名前。
option_value
オプション・データへのポインター。
option_length
オプション・データの長さ。

ソケット・オプションを操作する際、オプションが常駐するレベルとオプション名を指定する必要があります。ソケット・レベルでオプションを操作するには、sys/socket.h に定義されているように、level パラメーターを SOL_SOCKET に設定する必要があります。IPv4 または IPv6 レベルでオプションを操作するには、level パラメーターを、sys/socket.h に定義されている IPPROTO_IP、または netinet/in.h に定義されている IPPROTO_IPV6 に設定する必要があります。その他のレベル (TCP レベルなど) でオプションを操作するには、オプションを制御するプロトコルに該当するプロトコル番号を提供してください。getprotobyname() 呼び出しを使用して、名前を指定された プロトコルのプロトコル番号を戻すことができます。

option_value および option_length パラメーター が使用され、特定のセット・コマンドで使用されるデータが渡されます。option_value パラメーターは、設定コマンドで必要なデータを含む バッファーを指しています。option_value パラメーターはオプションで、コマンドで データが不要な場合には、NULL ポインターに設定できます。option_length パラメーターは、option_value に よって示されるデータのサイズに設定する必要があります。

SO_LINGER、SO_RCVTIMEO、および SO_SNDTIMEO を除くソケット・レベルの すべてのオプションでは、option_value が整数をポイントしていて、option_length には整数のサイズが設定されていると予期されます。整数がゼロ以外の場合には、オプションは使用可能です。ゼロの場合は、オプションは使用不可です。SO_LINGER オプションにより、option_value は、sys/socket.h で定義されている linger 構造体を指します。この構造体は以下の例で定義されます。
struct  linger
{
        int     l_onoff;                /* option on/off */
        int     l_linger;               /* linger time */
};

SO_LINGER オプションが使用不可になっている場合、l_onoff フィールドが 0 に設定されます。ゼロ以外の値の場合、オプションは使用可能になります。l_linger フィールドは、クローズ時に残っている時間の長さを 指定します。l_linger の単位は秒です。

以下のオプションが、IPv4 レベルで認識されます。
オプション
説明
IP_ADD_MEMBERSHIP
(RAW および UDP) このオプションを使用すると、特定のインターフェース上にあるマルチキャスト・グループを結合することができます (インターフェースをこのオプションで指定する必要があります)。 マルチキャスト・データグラムを受信するアプリケーションのみが、マルチキャスト・グループを結合する必要があります。送信のみを行うアプリケーションは、マルチキャスト・グループを結合する必要はありません。
マルチキャスト IP アドレスとインターフェース IP アドレスは、netinet/in.h 内の使用可能な以下の構造体に渡されます。
struct ip_mreq
{
   struct in_addr imr_multiaddr; /* IP multicast addr of group */
   struct in_addr imr_interface; /* local IP addr of interface */
};
渡された mreq 構造体のインターフェース・アドレスに INADDR_ANY が指定されていると、次のようにデフォルトのインターフェースが選択されます。
  • mreq 構造体内に指定されているグループ・アドレスが、GATEWAY ステートメントに指定されている場合は、そのインターフェースを使用します。
  • GATEWAY ステートメントに 224.0.0.0 が指定されている場合は、そのインターフェースを使用します。
  • DEFAULTNET が指定されており、それにマルチキャスト機能がある場合は、そのインターフェースを使用します。
IP_ADD_SOURCE_MEMBERSHIP
(RAW および UDP) このオプションを使用すると、ip_mreq_source 構造体によって指定された source-specific マルチキャスト・グループを結合することができます。 ip_mreq_source 構造体は、netinet/in.h で定義されます。
IP_BLOCK_SOURCE
(RAW および UDP) このオプションを使用すると、与えられたソースから与えられたマルチキャスト・グループへの動きをブロックできます (例えば、ユーザーがそのソースを「mute」した場合)。ソース・マルチキャスト・グループは、netinet/in.h で定義されている ip_mreq_source 構造体によって指定されます。
IP_DROP_MEMBERSHIP
(RAW および UDP) このオプションを使用すると、マルチキャスト・グループをそのままにしておくことができます。
マルチキャスト IP アドレスとインターフェース IP アドレスは、netinet/in.h 内の使用可能な以下の構造体に渡されます。
struct ip_mreq
{
   struct in_addr imr_multiaddr; /* IP multicast addr of group */
   struct in_addr imr_interface; /* local IP addr of interface */
};

渡された mreq 構造体のインターフェース・アドレスに INADDR_ANY が指定されていると、システムはインターフェースに関係なく、グループ (クラス D) アドレスが一致する最初のグループを削除します。

IP_DROP_SOURCE_MEMBERSHIP
(RAW および UDP) このオプションを使用すると、ip_mreq_source 構造体によって指定された source-specific マルチキャスト・グループをそのままにしておくことができます。ip_mreq_source 構造体は、netinet/in.h で定義されます。
IP_MULTICAST_IF
(RAW および UDP) このソケット・アプリケーションからアウトバウンド・マルチキャスト ・データグラムを送信するときに使用するインターフェースを設定します。マルチキャスト・データグラムは、一度に 1 つのインターフェースでのみ送信されます。IP アドレスは、in_addr 構造で渡されます。
渡されたインターフェース・アドレスに INADDR_ANY が指定されている 場合は、次のようにデフォルトのインターフェースが選択されます。
  • GATEWAY ステートメントに 224.0.0.0 が指定されている場合は、そのインターフェースを使用します。
  • DEFAULTNET が指定されており、それにマルチキャスト機能がある場合は、そのインターフェースを使用します。
IP_MULTICAST_LOOP
(RAW および UDP) 発信マルチキャスト・データグラムのループバックを使用可能または使用不可にします。デフォルトでは、使用可能です。使用可能な場合、発信マルチキャスト・グループを結合しているマルチキャスト・アプリケーションは、そのアドレス / ポートの対に宛先指定されているマルチキャスト・データグラムのコピーを受け取ることができます。ループバック標識が、u_char として渡されます。ループバックが使用不可の場合は、値 0 が指定されます。ループバックが使用可能の場合は、値 1 が指定されます。
IP_MULTICAST_TTL
(RAW および UDP) 発信マルチキャスト・データグラムの IP データグラム存続時間 (ホップ) を設定します。デフォルト値は 1 です (つまり、ローカル・サブネットへのマルチキャストだけです)。TTL 値が u_char として渡されます。
IP_RECVPKINFO
(RAW および UDP) 着信パケットの宛先 IP アドレスと、パケットの受信に使用されたインターフェースを、recvmsg() 関数呼び出しで IP_PKTINFO 補助データとして戻すことを使用可能または使用不可にします。オプション値は、int として指定されます。ゼロ以外の値はオプションを使用可能とし、ゼロはオプションを使用不可にします。

このオプションは、_OPEN_SYS_SOCK_EXT4 フィーチャー・テスト・マクロによって保護されます。

IP_UNBLOCK_SOURCE
(RAW および UDP) このオプションを使用すると、IP_BLOCK_SOURCE オプションを使用して実行された操作を取り消します (例えば、ユーザーがそのソースを「mutes」した場合)。ソース・グループは、netinet/in.h で定義されている ip_mreq_source 構造体によって指定されます。
MCAST_BLOCK_SOURCE
(RAW および UDP) このオプションを使用すると、与えられたソースから与えられたグループへのデータをブロックできます (例えば、ユーザーがそのソースを「mutes」した場合)。ソースは、netinet/in.h で定義されている group_source_req 構造体によって指定されます。
MCAST_JOIN_GROUP
(RAW および UDP) このオプションを使用すると、any-source グループを結合することができます。 グループは group_req 構造体よって指定されます。group_req 構造体は netinet/in.h で定義されます。
MCAST_JOIN_SOURCE_GROUP
(RAW および UDP) このオプションを使用すると、source-specific グループを結合することができます。ソースは、netinet/in.h で定義されている group_source_req 構造体によって指定されます。
MCAST_LEAVE_GROUP
(RAW および UDP) このオプションを使用すると、any-source グループをそのままにしておくことができます。 グループは group_req 構造体よって指定されます。group_req 構造体は netinet/in.h で定義されます。
MCAST_LEAVE_SOURCE_GROUP
(RAW および UDP) このオプションを使用すると、source-specific グループをそのままにしておくことができます。ソースは、netinet/in.h で定義されている group_source_req 構造体によって指定されます。
MCAST_UNBLOCK_SOURCE
(RAW および UDP) このオプションを使用すると、MCAST_BLOCK_SOURCE オプションを使用して実行された操作を取り消します (例えば、ユーザーがそのソースを後に「unmutes」した場合)。ソースは、netinet/in.h で定義されている group_source_req 構造体によって指定されます。

以下のオプションが、IPv6 レベルで認識されます。

オプション
説明
IPV6_ADDR_PREFERENCES
(TCP および UDP) 所定ソケットのソース・アドレス選択優先フラグの設定に使用されます。 ソケット・オプション値 (optval) は、32 ビット符号なし整数引数です。 この引数は、複数のフラグで構成されます。この場合、各フラグが、ソース・アドレス選択優先設定を示します。これらのフラグは、ソース・アドレスに対するアプリケーションの優先設定を示しますが、優先アドレス属性を持つ IP アドレスが使用不可である場合、TCP スタックによって無視されます。 例えば、IPV6_PREFER_SRC_TMP の優先フラグは、アプリケーションが公開ソース・アドレスよりも、一時 IPv6 ソース・アドレスの使用を優先することをスタックに指示します。論理 OR で複数のフラグを結合して、フラグが矛盾しない限り、複数の設定を示すことができます。フラグ・ビット値の定数は netinet/in.h で定義されます。
IPV6_CHECKSUM
(RAW) RAW (非 ICMPv6) ソケットの場合、このオプションは出力のチェックサムを計算して保管し、受信された入力のチェックサムを検証するようカーネルに指示します。これは、アプリケーションが送信されたパケット上のソース・アドレス・セレクションを実行することを妨げます。このオプションは、チェックサムが配置されるユーザー・データへの整数値を指定します。オプション値 -1 を指定することにより、このオプションは使用不可になります。
IPV6_DONTFRAG
(RAW および UDP) このオプションは、UDP ソケットおよびロー・ソケットに対するパケットへのフラグメント・ヘッダーの自動挿入をオフにする。
IPV6_DSTOPTS
(RAW および UDP) ゼロのオプション長を指定してこのオプションに対する setsockopt() を呼び出すことによって、アプリケーションはスティッキー宛先オプション・ヘッダーを除去できる。
IPV6_HOPOPTS
(RAW および UDP) ゼロのオプション長を指定してこのオプションに対する setsockopt() を呼び出すことによって、アプリケーションはスティッキー・ホップ単位オプション・ヘッダーを除去できる。
IPV6_JOIN_GROUP
(RAW および UDP) パス済みの ipv6_mreq 構造体によって指定されるマルチキャスト・グループと結合することにより、マルチキャスト・パケットの受信を制御します。ipv6_mreq 構造体は、 netinet/in.h で定義されます。
IPV6_LEAVE_GROUP
(RAW および UDP) パス済みの ipv6_mreq 構造体に指定されるマルチキャスト・グループから離れることにより、マルチキャスト・パケットの受信を制御します。ipv6_mreq 構造体は、 netinet/in.h で定義されます。
IPV6_MULTICAST_HOPS
(RAW および UDP) 発信マルチキャスト・パケットのホップ限界を設定します。ホップしきい値は int としてパスされてきます。
IPV6_MULTICAST_IF
(RAW および UDP) インターフェースを発信マルチキャスト・パケットに設定します。インターフェースの指定には、インターフェース索引が使用されます。これは、u_int としてパスされてきます。
IPV6_MULTICAST_LOOP
(RAW および UDP) マルチキャスト・データグラムが、送信ホスト自体の所属するグループへ送信された場合、 (発信インターフェース上で)、このオプションが 1 にセットされていた場合は、データグラムのコピーがローカル・デリバリーの IP レイヤーによってループバックされます。このオプションがゼロに設定されていた場合は、コピーはループバックされません。その他のオプション値は、 EINVAL の errno を戻します。デフォルトでは 1 (ループバック) です。オプション値は、 int としてパスされてきます。
IPV6_NEXTHOP
(RAW および UDP) ソケット・アドレス構造としてデータグラムのネクスト・ホップを指定する。
IPV6_RECVDSTOPTS
(RAW および UDP) 宛先オプション・ヘッダーを受け取るには、このオプションを使用可能にする必要がある。
IPV6_RECVHOPLIMIT
(RAW、TCP、および UDP) このオプションが使用可能な場合、着信パケットから受信されたホップ限界は、recvmsg() 関数呼び出しで IPV6_HOPLIMIT 補助データとして戻されます。オプション値は、int として指定されます。ゼロ以外の値はオプションを使用可能とし、ゼロはオプションを使用不可にします。
IPV6_RECVHOPOPTS
(RAW および UDP) ホップ単位オプション・ヘッダーを受け取るには、このオプションを使用可能にする必要がある。
IPV6_RECVPATHMTU
(RAW および UDP) recvmsg() 関数呼び出しで IPV6_PATHMTU 補助データの受け取りを可能にします。
IPV6_RECVPKTINFO
(RAW および UDP) 着信パケットの宛先 IP アドレスと、パケットの受信に使用されたインターフェースを、recvmsg() 関数呼び出しで IPV6_PKTINFO 補助データとして戻すことを使用可能または使用不可にします。オプション値は、int として指定されます。ゼロ以外の値はオプションを使用可能とし、ゼロはオプションを使用不可にします。
IPV6_RECVRTHDR
(RAW および UDP) ルーティング・ヘッダーを受け取るには、このオプションを使用可能にする必要がある。
IPV6_RECVTCLASS
(RAW、TCP、および UDP) トラフィック・クラスを受け取るには、このオプションを使用可能にする必要がある。
IPV6_RTHDR
(RAW および UDP) ゼロのオプション長を指定してこのオプションに対する setsockopt() を呼び出すことによって、アプリケーションはスティッキー・ルーティング・ヘッダーを除去できる。
IPV6_RTHDRDSTOPTS
(RAW および UDP) ゼロのオプション長を指定してこのオプションに対する setsockopt() を呼び出すことによって、アプリケーションはスティッキー宛先オプション・ヘッダーを除去できる。
IPV6_TCLASS
(RAW、TCP、および UDP) トラフィック・クラス値を指定するには、このオプションを使用可能にする必要がある。
IPV6_UNICAST_HOPS
(RAW および UDP) 発信ユニキャスト IPv6 packets の中のホップ限界を制御するために使用されます。ホップしきい値は int としてパスされてきます。
IPV6_USE_MIN_MTU
(RAW、TCP、および UDP) IP レイヤーが、パス MTU ディスカバリーをバイパスして、パケット送信に最小 MTU サイズ (1280) を使用するかどうかを示す。オプション値は、 int としてパスされてきます。-1 の値は、ユニキャスト (使用不可) およびマルチキャスト (使用可能) 宛先のデフォルト値が 使用される原因になります。0 の値は、ユニキャストおよびマルチキャスト宛先のこのオプションを使用不可に設定します。1 の値は、ユニキャストおよびマルチキャスト宛先のこのオプションを使用可能にして、最小 MTU サイズが使用されます。
IPV6_V6ONLY
(RAW、TCP、および UDP) ソケットが、IPv6 コミュニケーションのみに制限されるかどうかを判別するために使用されます。デフォルト設定は off です。オプション値は、 int としてパスされてきます。 ゼロ以外の値は、オプションが使用可能 (ソケットは IPv6 コミュニケーションのみに使用可能) であることを示します。 0 は、オプションが使用不可であることを示します。
注: これらのオプションを使用するには、フィーチャー・テスト・マクロ #define _OPEN_SYS_SOCK_IPV6 を使用する必要があります。
以下のオプションが、ICMPv6 レベルで認識されます。
オプション
説明
ICMP6_FILTER
(RAW) ICMPv6 メッセージのフィルター操作に使用されます。 オプション値は、icmp6_filter 構造体としてパスされてきます。icmp6_filter 構造体は、netinet/icmp6.h.n に定義されています。
以下のようなオプションが、ソケット・レベルで認識されます。
オプション
説明
SO_BROADCAST
メッセージをブロードキャストする機能を切り替えます。宛先で指定されるインターフェースで、パケットのブロードキャストが サポートされている場合には、このオプションが使用可能の場合、アプリケーション・プログラムでブロードキャスト・メッセージ を socket に送信することができるようになります。このオプションは、ストリーム・ソケットには何の意味もありません。
SO_DEBUG
デバッグ情報の記録をオンにします。このオプションによって、基礎になっているプロトコル・モジュールでの デバッグを使用可能または使用不可にすることができます。このオプションは、int 値をとります。
SO_KEEPALIVE
ストリーム・ソケットの TCP キープアライブ・メカニズムを切り替えます。活動化されていると、キープアライブ・メカニズムによって、パケットが定期的に異なるアイドル接続に送信されます。リモート TCP がパケットまたはパケットの再伝送に応答しない 場合には、接続がエラー ETIMEDOUT で終了されます。
SO_LINGER
データが存在している場合は、クローズに留まります。このオプションが使用可能で、close() が呼び出された ときに、未送信データが存在していた場合には、データが送信され るか、または接続がタイムアウトになるまで、close() 呼び出し の間、呼び出しアプリケーション・プログラムはブロックされます。このオプションが使用できない場合、TCP/IP アドレス・スペースは、データを送信する前にいったん待機します。TCP/IP アドレス・スペースの待機時間は、データを送信しようとする 時間のうちの限られた時間だけなので、データ転送は通常は正常に 行われますが、保証はできません。close() 呼び出しは、呼び出し元をブロックしないで、戻ります。このオプションは、ストリーム・ソケットにのみ意味を持ちます。
SO_OOBINLINE
アウト・オブ・バンドのデータの受信を切り替えます。このオプションが使用可能の場合、アウト・オブ・バンドのデータは 受信されると標準データ入力キューに入ります。そして、recv()、 recvfrom()、および recvmsg() 呼び出しで MSG_OOB フラグを指定しなくても、このデータを使用することができます。このオプションが使用不可の場合、アウト・オブ・バンドのデータは 受信されると優先順位データ入力キューに入ります。そして、recv()、 recvfrom()、および recvmsg() 呼び出しで MSG_OOB フラグを指定するだけで、このデータを使用することができます。このオプションは、ストリーム・ソケットにのみ意味を持ちます。
_SO_PROPAGATEUSERID
AF_UNIX ストリーム・ソケットによるユーザー ID (UID) の伝搬を切り替えます。 使用可能な場合は、connect() 関数が呼び出されるとユーザー (UID) 情報 がシステムから取り出されます。accept() 関数が呼び出されると、アクセプターは、受け入れられたソケットがクローズされるまで、コネクターの識別を想定します。
SO_RCVBUF
受信バッファー・サイズを設定します。このオプションは、int 値をとります。この値は、ソケットの接続後に設定することはできません。
SO_RCVTIMEO

入力関数がその完了まで待つ 最大時間を指定するタイムアウトを設定します。

これは、入力操作の完了をどれだけ待機するのかを指定する 秒数およびマイクロ秒数が入った timeval 構造体を 受け入れます。timeval 構造体には、フルワード 2 進数で指定された秒数と マイクロ秒数が含まれています。秒数は 0 から 2,678,400 (31 日間に相当) まで の範囲内の値、マイクロ秒数は 0 から 1,000,000 (1 秒に相当) までの範囲内 の値です。timeval 構造体 はマイクロ秒単位の細分度を使用して指定できますが、この関数をインプリメント するのに使用される内部 TCP/IP タイマーの細分度は約 100 ミリ秒です。

追加データを受信することなくこの時間の間ブロックしていた受信操作は、 部分的なカウントで戻るか、受信したデータがない場合は errno を EWOULDBLOCK に 設定して戻ります。このオプションのデフォルトはゼロです。 これは、受信操作がタイムアウトしないことを意味します。

SO_REUSEADDR

ローカル・アドレスの再使用を切り替えます。このオプションを使用可能にすると、既に使用中のローカル・アドレスをバインドすることができます。 これで、bind() 呼び出しで使用される標準アルゴリズムが変更されます。

ローカル・アドレスおよびポートに、同じ外部アドレスおよびポート がないことを確認するために、システムでは接続時間に検査が行われ ます。関連が既に存在している場合には、エラー EADDRINUSE が戻されます。

SO_REUSEADDR オプションがアクティブになって以降は、以下の状態がサポートされます。

すべての呼び出しが別々のローカル IP アドレスを使用し、ワイルドカード・アドレス INADDR_ANY がポートごとに 1 回のみ使用されている限り、サーバーは同じポートを複数回 bind() できます。

SO_SNDBUF
送信バッファー・サイズを設定します。このオプションは、int 値をとります。この値は、ソケットの接続後に設定することはできません。
SO_SNDTIMEO

データ送信を防止するフロー制御が原因で出力関数がブロックする時間を指定する、 タイムアウト値を設定します。

これは、入力操作の完了をどれだけ待機するのかを指定する 秒数およびマイクロ秒数が入った timeval 構造体を 受け入れます。timeval 構造体には、フルワード 2 進数で指定された秒数と マイクロ秒数が含まれています。秒数は 0 から 2,678,400 (31 日間に相当) まで の範囲内の値、マイクロ秒数は 0 から 1,000,000 (1 秒に相当) までの範囲内 の値です。timeval 構造体 はマイクロ秒単位の細分度を使用して指定できますが、この関数をインプリメント するのに使用される内部 TCP/IP タイマーの細分度は約 100 ミリ秒です。

この時間の間ブロックされた送信操作は、部分的なカウントで 戻るか、送信されたデータがない場合は errno を EWOULDBLOCK に設定して戻ります。このオプションの デフォルトはゼロです。これは、送信操作がタイムアウトにならないことを意味します。

SO_SECINFO
受信セキュリティー情報を切り替えます。AF_UNIX UDP ソケット上で使用可能にされると、recvmsg() 関数は、各データグラムの送信側に関するセキュリティー情報を補助データとして戻します。この情報は、送信側のユーザー ID、UID、GID、およびジョブ名を含み、sys/socket.h の secsinfo 構造体によってマップされます。
注: これらのオプションを使用するには、フィーチャー・テスト・マクロ #define _OPEN_SYS_SOCK_IPV6 を使用する必要があります。

C++ の特殊な動作: この関数を C++ で使用するには、_XOPEN_SOURCE_EXTENDED 1 フィーチャー・テスト・マクロを使用する必要があります。

戻り値

正常に実行された場合、setsockopt() は 0 を戻します。

正常に実行されなかった場合、setsockopt() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EADDRNOTAVAIL
ipi6_addr は、ipi6_ifindex インターフェース上では使用不能か、またはソケット、インターフェース、およびマルチキャスト・グループ値から成るタプルが存在しません。
EBADF
socket パラメーターが無効ソケット記述子です。
EDOM
送信または受信されるタイムアウト値が 31 日間を超えています。
EFAULT
option_value および option_length パラメーターを使用すると、呼び出し元のアドレス・スペースの外側のストレージにアクセスすることになります。
EHOSTUNREACH
ifi6_ifindex が指定するインターフェースを介した宛先出口への経路は存在しません。
EINVAL
指定オプションが指定ソケット・レベルで無効であるか、またはソケットがシャットダウンされていました。
ENETDOWN
ipi6_ifindex が指定したインターフェースは、IPv6 での使用は可能ではありません。
ENOBUFS
使用可能なシステム・リソースが不十分で、呼び出しを完了させることができないか、または最大 64 個のソース・フィルターがマルチキャスト・グループ、インターフェースの対の単位で指定可能になっています。
ENOPROTOOPT
option_name パラメーターが認識されていないか、または level パラメーターが SOL_SOCKET ではありません。
ENOSYS
関数がインプリメントされていません。まだ使用可能になっていない関数を使用しようとしました。
ENOTSOCK
記述子はファイル用であり、ソケット用ではありません。
ENXIO
ipi6_ifindex に指定されたインターフェースは存在しません。

以下は、setsockopt() 呼び出しの例です。getsockopt() オプション・セットの照会方法の例 については、getsockopt() - ソケットに関連したオプションの取得を参照してください。
int rc;
int s;
int option_value;
struct linger l;
int setsockopt(int s, int level, int option_name, 
char *option_value,
     int option_len);
⋮
/* I want out of band data in the normal input queue */
option_value = 1;
rc = setsockopt(s, SOL_SOCKET, SO_OOBINLINE, 
(char *) &option_value, sizeof(int));

⋮
/* I want to linger on close */
l.l_onoff  = 1;
l.l_linger = 100;
rc = setsockopt(s, SOL_SOCKET, SO_LINGER, 
(char *) &l, sizeof(l));