Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ spp(4P) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

intro(4N)

ns(4F)

SPP(4P)  —  NEWS-OS Programmer’s Manual

名称

spp − Xerox の順次パケットプロトコル

形式

#include <sys/socket.h>
#include <netns/ns.h>
s = socket(AF_NS, SOCK_STREAM, 0);

#include <netns/sp.h>
s = socket(AF_NS, SOCK_SEQPACKET, 0);

解説

SPP プロトコルは、データの信頼できる、フロー制御の、双方向の伝送を提供します。 これは、SOCK_STREAM のアブストラクトをサポートするために使用される バイトストリームのプロトコルです。 SPP は、標準の NS(tm) アドレスフォーマットを使用します。

SPP プロトコルを利用しているソケットは、“アクティブ” か “パッシブ” のいずれかです。 アクティブなソケットは、パッシブなソケットへのコネクションを始めます。 デフォルトにより、SPP ソケットは、アクティブに作成されます。 パッシブなソケットを作成するためには、 listen(2) システムコールは、 ソケットと、 bind(2) システムコールをバインドしたあとで使用しなければなりません。 パッシブなソケットだけが、 accept(2) コールを使用して、入ってくるコネクションを受け入れることができます。 また、アクティブなソケットだけが、 connect(2) コールを使用して、コネクションを開始します。

パッシブなソケットは、複数のネットワークから入ってくるコネクションの リクエストを適合させるために、それらの位置を “指定下” におきます。 “ワイルドカードのアドレス指定” と名付けられたこの技法により、 サーバ 1 つで、複数のネットワーク上のクライアントへのサービスを 提供することができます。 すべてのネットワーク上でリッスンするソケットを作成するために、 すべてがゼロの NS アドレスを設定しなければなりません。 SPP ポートは、この時点でも指定されています。 ポートが指定されていない場合は、システムはポートを設定します(割当てます)。 いったんコネクションが確立されると、ソケットのアドレスは、 それに匹敵するエンティティの位置により固定されます。 ソケットが割当てられているアドレスは、ネットワークインターフェース (このインターフェースを介してパケットが伝送されたり、 受信されたりします)に対応するアドレスです。 通常、このアドレスは、匹敵するエンティティのネットワークに対応します。 SOCK_SEQPACKET ソケットの型が指定されている場合は、 受信された各パケットは、検査のためにユーザーに残された 実際の 12 バイトの順次パケットヘッダをもっています。

struct sphdr {
        u_char      sp_cc;      /∗ コネクションの制御 ∗/
#define SP_EM 0x10              /∗ メッセージの終わり ∗/
        u_char      sp_dt;      /∗ データストリームの型 ∗/
        u_short     sp_sid;
        u_short     sp_did;
        u_short     sp_seq;
        u_short     sp_ack;
        u_short     sp_alo;
};

これは、データストリームの型のフィールドおよびメッセージの終わりの ビットを利用する高水準の Xerox プロトコルのインプリメンテーションを 容易にします。 逆に、ユーザは、12 バイトのヘッダを供給するように要求されます。 検査されたその部分だけが、データストリームの型、 およびメッセージの終わりのフィールドです。 いずれのソケットタイプについても、送られたアテンションビットとともに 受信されたパケットは、out-of-band データとして解釈されます。 send(..., ..., ..., MSG_OOB) の形式で送られたデータは、 アテンションビットを設定させます。

診断

ソケットの操作は、返される次のエラーのうちの 1 つにより失敗します。

[EISCONN] すでにコネクションをもっているソケット上にコネクションを 確立しようとした。

[ENOBUFS] システムが内部データ構造のメモリを使い果たしてしまった。

[ETIMEDOUT] 過度の再伝送によりコネクションが外れた。

[ECONNRESET] リモートピアがコネクションをクローズさせた。

[ECONNREFUSED] リモートピアがアクティブに、コネクションの確立を拒んだ (通常、ポートに注意を向けている(リッスンしている)プロセスがないので)。

[EADDRINUSE] すでに割当てられているポートをもつソケットを作成しようとした。

[EADDRNOTAVAIL] ネットワークインターフェースが存在しないネットワークアドレスをもつ ソケットを作成しようとした。

ソケットのオプション

SO_DEFAULT_HEADERS
このオプションが設定されると、これは、データストリームの型、 およびメッセージの終わりのビットは、あらゆる次のパケット上に 設定されるのか否かを決定します。

SO_MTU これは、シングルパケット中のユーザデータの最大量を指定します。 デフォルトは 576 バイト − sizeof(struct spidp) です。 この量は、ウィンドウ作成に影響します。 すなわち、ソケット中のバッファリングの量を増加させることなく それを増やすと、受信された未読込みのパケットの数を少なくします。 デフォルト値以上のものはなにも、 bona fide XEROX 製品の インタネットワークルータによっては転送されません。 setsockopt コールのデータ引数は、符号なしのショートでなければなりません。

関連事項

intro(4N), ns(4F)

バグ

ストリーム中のレコード境界を反映するための方法がいくつかなければ なりません。 ストリームモードについて、ユーザプロセスが受信しようとしている レコードのデータストリームの型を獲得するためのオプションが なければなりません。

NEWS-OSRelease 4.1C

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