Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ setsockopt(2) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ioctl(2)

socket(2)

getprotoent(3N)

GETSOCKOPT(2)  —  NEWS-OS Programmer’s Manual

名称

getsockopt, setsockopt − ソケットに関するオプションを取り出す/セットする

形式

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

getsockopt(s, level, optname, optval, optlen)
int s, level, optname;
char ∗optval;
int ∗optlen;

setsockopt(s, level, optname, optval, optlen)
int s, level, optname;
char ∗optval;
int optlen;

解説

getsockopt と setsockopt は、 ソケットに対するオプションを 操作します。 オプションは、 複数のプロトコルレベルに存在することができ、 最上位の“ソケット”レベルには常に存在します。

ソケットのオプションを 操作するときには、 オプションの存在するレベルとオプションの名前を 指定しなければなりません。 “ソケット”レベルにあるオプションを 操作するためには、 level は SOL_SOCKET として指定します。 その他のレベルにあるオプションを 操作するためには、 オプションを 制御している適切なプロトコルのプロトコル番号を 使用します。 例えば、 オプションが TCP プロトコルによって解釈されることを 示すためには、 level を TCP のプロトコル番号にセットします。 getprotoent(3N) を 参照してください。

パラメータ optval と optlen は、 setsockopt では、 オプションの値にアクセスするために使用されます。 getsockopt では、 これらのパラメータは、 要求したオプションの返されるバッファを 識別します。 getsockopt の場合、 optlen はこの値を返すためのパラメタであり、 当初これには optval によって指し示されているバッファのサイズが収められていて、 リターン時には修正されて、 返された値の実際の長さを 示します。 オプションの値を 与えない、 または返されないようにする場合は、 optval は 0 として与えることができます。

optname および指定されたオプションは、 すべて未解釈のままで適切なプロトコルモジュールに渡され、 そこで解釈されます。 インクルードファイル <sys/socket.h> には、 “ソケット”レベルのオプション (後述) の定義が収められています。 他のプロトコルレベルにあるオプションは、 フォーマットと名前が違いますので、 セクション (4P) の適切な箇所を 参照してください。

大部分のソケットレベルオプションは、 optval に int パラメータを とります。 setsockopt では、 このパラメタは、boolean オプションを オンにする場合はゼロ以外にし、 オフにする場合はゼロにする必要があります。 SO_LINGER は、 <sys/socket.h> で定義されている、 オプションの希望する状態と遅延間隔を 指定する struct linger パラメタを 使用します (下記参照)。

以下のオプションは、 ソケットレベルで認識されるものです。 特にことわりのないオプションは、 getsockopt で調べられ、 setsockopt でセットされます。

SO_DEBUG デバッギング情報の記録をオンにしたり、オフにしたりします (トグル)。

SO_REUSEADDR
ローカルアドレスの再使用をオンにしたり、オフにしたりします (トグル)。

SO_KEEPALIVE
コネクションの持続をオンにしたり、オフにしたりします (トグル)。

SO_DONTROUTE
出力メッセージのバイパスをオンにしたり、オフにしたりします (トグル)。

SO_LINGER データがある場合、クローズ時に遅延を発生させます。

SO_BROADCAST
ブロードキャストメッセージを発信する許可をオンにしたり、 オフにしたりします (トグル)。

SO_OOBINLINE
一群の out-of-band データの受信をオンにしたり、 オフにしたりします (トグル)。

SO_SNDBUF 出力のためのバッファサイズをセットします。

SO_RCVBUF 入力のためのバッファサイズをセットします。

SO_TYPE ソケットのタイプを取り出します (getsockopt だけ)。

SO_ERROR ソケットのエラーを取り出してクリアします (getsockopt だけ)。

SO_DEBUG は、 内在しているプロトコルモジュールのデバッギングを 可能にします。 SO_REUSEADDR は、 bind(2) コールで与えられたアドレスの有効化で使用される規則がローカルアドレスの再使用を 許すべきであることを 示します。 SO_KEEPALIVE は、 コネクトされているソケットにメッセージを定期的に送出し、 コネクトしている先からこれらのメッセージに対する応答がなくなると、 コネクトは遮断されたと見なされ、 そのソケットを 使用しているプロセスは SIGPIPE シグナルで通知されます。 SO_DONTROUTE は、 出力されるメッセージが標準的なルートを バイパスすべきであることを 示します。 代わりに、 メッセージは宛先アドレスのネットワーク部に従って適切な ネットワークインターフェースへ振り向けられます。

SO_LINGER は、 未送出のメッセージがソケットのキューにあって、 close(2) が実行されるときに行われる処理を制御します。 そのソケットがデータの信頼性のある送出を約束するものであって、 SO_LINGER がセットされている場合には、 システムは、 close の実行時に、 プロセスがデータを送出できるまで、 または情報の送出ができないと分かるまで、 プロセスをブロックします (遅延間隔と呼ばれる中断時間は、 SO_LINGER が要求されるときに setsockopt で指定されます)。 SO_LINGER がオフになっていて、 close が発行された場合には、 システムは、 プロセスができるだけ早く継続できるような方法で、 そのクローズを処理します。

オプション SO_BROADCAST は、 そのソケットでブロードキャストデータグラムを 送るための許可を要求します。 システムの以前のバージョンでは、 ブロードキャストは特権を 要するオペレーションになっていました。 範囲外データをサポートしているプロトコルがあれば、 SO_OOBINLINE オプションは、out-of-band データが 受信された順に通常のデータ入力キューに置かれることを要求します。 その後、 このデータへは MSG_OOB フラグのない recv または read コールを使用してアクセスすることができます。 SO_SNDBUF と SO_RCVBUF は、 それぞれ出力バッファと入力バッファのために割り当てられている通常の バッファサイズを調整するためのオプションです。 バッファサイズは、 大量のコネクトに対処するために大きくしたり、 入ってくるデータの残量を 制限するために小さくしたりすることができます。 システムはこれらの値に絶対的な制限を設けています。 最後に、 SO_TYPE と SO_ERROR は、 setsockopt でだけ使用されるオプションです。 SO_TYPE は、 SOCK_STREAM のような、 ソケットのタイプを返します。 このオプションは、 スタートアップ時にソケットを受け継ぐサーバのために役立ちます。 SO_ERROR は、 ソケットでペンディングになっているエラーを返し、 そのエラーステータスをクリアします。 このオプションは、 コネクトされている datagram ソケットの 非同期エラーまたはその他の非同期エラーがあるかどうかを チェックするために使用することができます。

リターン値

コールが成功した場合には 0、 失敗した場合には −1 が返されます。

エラー

次の場合でない限り、 コールは成功します。

[EBADF] 引数 s が有効なディスクリプタではない。

[ENOTSOCK] 引数 s がソケットではなく、 ファイルである。

[ENOPROTOOPT] このオプションは指定されたレベルでは未知である。

[EFAULT] optval によって指し示されているアドレスが、 プロセスのアドレススペースの有効な部分にない。 getsockopt の場合も、 optlen がプロセスのアドレススペースの有効な部分になければ、 このエラーが返されます。

関連事項

ioctl(2), socket(2), getprotoent(3N)

バグ

ソケットオプションのうちのいくつかは、 システムのより低いレベルで扱われる必要があります。

NEWS-OSRelease 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026