この章の目次にもどる
前頁:3.9 フォントマネージャにもどる
次頁:3.11 印刷マネージャ仕様書にすすむ
TCP/IP マネージャは LAN を利用した TCP/IP
通信の機能を実現するモジュールでネットワーク上の別のマシンと TCP/IP
プロトコルを用いて通信することができる。
TCP/IP マネージャのシステムコールはソケットを意識したものとなっている。
通信はソケットを作成し、
ソケットデスクリプタを使用して行なう。
このソケットデスクリプタはファイルデスクリプタとは別の概念であり、
TCP/IP マネージャのシステムコールではソケットデスクリプタのみを扱うことができる。
また、ソケットによる通信であっても、
同一マシン内の異なるプロセス間の通信手段として利用することはできない。
以下のデータを定義する。
/* プロトコルファミリ */
#define PF_UNSPEC 0 /* unspecified protocol family */
#define PF_INET 2 /* TCP/IP and related */
/* アドレスファミリ
*/
#define AF_UNSPEC 0 /* unspecified address family */
#define AF_INET 2 /* TCP/IP and related */
/* ソケットタイプ
*/
#define SOCK_STREAM 1 /* stream socket */
#define SOCK_DGRAM 2 /* datagram socket */
#define SOCK_RAW 3 /* raw-protocol interface */
/* getsockopt(), setsockopt() のオプション
*/
#define SOL_SOCKET 0xffff /* options for socket level */
#define IPPROTO_TCP 0x0001 /* options for TCP level */
#define IPPROTO_IP 0x0002 /* options for IP level */
#define SO_DEBUG 0x0001 /* turn on debugging info recording */
#define SO_REUSEADDR 0x0004 /* allow local address reuse */
#define SO_KEEPALIVE 0x0008 /* keep connections alive */
#define SO_DONTROUTE 0x0010 /* just use interface addresses */
#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
#define SO_LINGER 0x0080 /* linger on close if data present */
#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */
#define SO_SNDBUF 0x1001 /* send buffer size */
#define SO_RCVBUF 0x1002 /* receive buffer size */
#define SO_ERROR 0x1007 /* get error status and clear */
#define SO_TYPE 0x1008 /* get socket type */
#define TCP_MAXSEG 0x2000 /* maximum segment size */
#define TCP_NODELAY 0x2001 /* immediate send() */
#define IP_OPTIONS 0x0001 /* IP header options */
/* recv, send のオプション */
#define MSG_OOB 0x01 /* send or receive out of band data */
#define MSG_PEEK 0x02 /* take data but leave it */
#define MSG_DONTROUTE 0x04 /* do not route */
/* fcntl のオプション */
#define O_NDELAY 0x04 /* non-blocking */
#define FNDELAY O_NDELAY /* synonym */
#define F_GETFL 3 /* get flags */
#define F_SETFL 4 /* set flags */
/* ioctl のオプション */
#define SIOCATMARK 7 /* check for out of bound data */
/* アドレス */
struct sockaddr {
unsigned short sa_family; /* address family */
char sa_data[14]; /* up to 14 bytes of direct address */
};
/* インターネットアドレス */
struct in_addr {
unsigned long s_addr;
};
/* ソケットアドレス */
struct sockaddr_in {
short sin_family;
unsigned short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
struct iovec { /* address and length */
char *iov_base; /* base */
int iov_len; /* size */
};
/* recvmsg, sendmsg 用メッセージヘッダ */
struct msghdr { /* Message header for recvmsg and sendmsg. */
char *msg_name; /* optional address */
int msg_namelen; /* size of address */
struct iovec *msg_iov; /* scatter/gather array */
int msg_iovlen; /* # elements in msg_iov */
char *msg_accrights; /* access rights sent/received */
int msg_accrightslen;
};
struct hostent { /* structure for gethostbyname */
char *h_name; /* official name of host */
char **h_aliases; /* alias list */
int h_addrtype; /* host address type */
int h_length; /* length of address */
char **h_addr_list; /* list of addresses from name server */
#define h_addr h_addr_list[0] /* address, for backward compatiblity */
};
struct servent { /* structure for getservbyname */
char *s_name; /* official service name */
char **s_aliases; /* alias list */
int s_port; /* port # */
char *s_proto; /* protocol to use */
};
struct linger { /* structure for the SO_LINGER option */
int l_onoff; /* zero=off, nonzero = on */
int l_linger; /* linger time, in seconds */
};
#define FD_SETSIZE 256
typedef struct fd_set { /* Bit mask for select() */
int fds_bits[FD_SETSIZE/sizeof(int)];
} fd_set;
struct timeval { /* Timeout format for select() */
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
以下のエラーコードが定義されている。
#define EX_HOSTUNREACH ((-401) << 16) /* ホストが見つからない */
#define EX_TIMEDOUT ((-402) << 16) /* TCPIP タイムアウト */
#define EX_CONNABORTED ((-403) << 16) /* 接続がアボートされた */
#define EX_NOBUFS ((-404) << 16) /* TCPIP 内部領域不足 */
#define EX_BADF ((-405) << 16) /* ソケットが無効 */
#define EX_WOULDBLOCK ((-407) << 16) /* ブロックされる処理がある */
#define EX_MSGSIZE ((-408) << 16) /* 送信メッセージの細分化ができない */
#define EX_DESTADDRREQ ((-409) << 16) /* 送信先アドレス指定が必要 */
#define EX_PROTOTYPE ((-410) << 16) /* プロトコルが不正 */
#define EX_NOPROTOOPT ((-411) << 16) /* 利用できないプロトコル指定 */
#define EX_PROTONOSUPPORT ((-412) << 16) /* 認識されていないオプション指定 */
#define EX_SOCKTNOSUPPORT ((-413) << 16) /* サポートされていないソケットタイプ */
#define EX_OPNOTSUPP ((-414) << 16) /* サポートされていない動作指定 */
#define EX_PFNOSUPPORT ((-415) << 16) /* サポートされていないプロトコルファミリ */
#define EX_AFNOSUPPORT ((-416) << 16) /* サポートされていないアドレスファミリ */
#define EX_ADDRINUSE ((-417) << 16) /* アドレスは使用中 */
#define EX_ADDRNOTAVAIL ((-418) << 16) /* アドレスが利用できない */
#define EX_NETDOWN ((-419) << 16) /* ネットワーク機能が無効 */
#define EX_NETUNREACH ((-420) << 16) /* ネットワークが見つからない */
#define EX_NETRESET ((-421) << 16) /* ネットワークがリセットされた */
#define EX_CONNRESET ((-422) << 16) /* 接続がリセットされた */
#define EX_ISCONN ((-423) << 16) /* ソケットは接続済み */
#define EX_NOTCONN ((-424) << 16) /* ソケットは接続されていない */
#define EX_SHUTDOWN ((-425) << 16) /* 送信は禁止されている */
#define EX_CONNREFUSED ((-426) << 16) /* 接続が拒絶された */
#define EX_HOSTDOWN ((-427) << 16) /* ホストがダウンしている */
#define EX_ALREADY ((-428) << 16) /* 既に処理中の動作 */
#define EX_INPROGRESS ((-429) << 16) /* 非ブロック化ソケットで接続中 */
【形式】
ERR so_start (W arg)
【パラメータ】
W arg 特殊用途の引数
【リターン値】
=0 正常
<0 エラー(エラーコード)
【解説】
TCP/IP 通信を初期化する。
通常はアプリケーションプロセスが TCPIPMGR
のその他のシステムコールを呼び出すと暗黙的に TCP/IP
通信の初期化が行なわれる。
【形式】
ERR so_finish (W arg)
【パラメータ】
W arg 0 終了宣言
<0 特殊用途
【リターン値】
≧0 正常
<0 エラー
【解説】
TCP/IP の終了宣言。
プロセス終了時に自動的に呼び出されるので通常は、明示的に呼び出す必要はない。
【エラーコード】
ER_BUSY TCP/IP ロック中。
EX_NOSPT TCP/IP を使用していないのに so_finish を呼び出した。
【形式】
WERR so_accept (W s, SOCKADDR *nam, W *namlen)
【パラメータ】
W s ソケットデスクリプタ
SOCKADDR *nam アドレスが戻される
W *namlen アドレスのバイト長
【リターン値】
≧0 新規生成されたソケットデスクリプタ
<0 エラーコード
【解説】
listen
状態にあるソケットに対して接続要求を待ち、
要求があったときに最初の要求を取りだし、
ソケット s
と同じ属性の新しいソケットを生成しそのデスクリプタを戻す。
接続要求元のアドレスとその長さが、
nam
および namlen
に戻される。
元のソケット s
は、
次の要求を受け付けるためにオープンされたままとなる。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効
EX_WOULDBLOCK ソケットが非ブロック化されていて、接続要求がない
EX_NOBUFS 内部領域不足
【形式】
ERR so_bind (W s, SOCKADDR *nam, W namlen)
【パラメータ】
W s ソケット
SOCKADDR *nam アドレス
W namlen アドレスのバイト長
【リターン値】
=0 正常
<0 エラー
【解説】
名前なしのソケットに nam
および
namlen
で指定した名前を割り当てる。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)。
EX_BADF ソケットが無効。
EX_FAULT 名前が不正。
EX_ADDRNOTAVAIL 名前(アドレス)が利用できない。
EX_ADDRINUSE 名前(アドレス)は使用中。
【形式】
ERR so_close (W s)
【パラメータ】
W s ソケットデスクリプタ
【リターン値】
=0 正常
<0 エラー
【解説】
ソケットをクローズする。
【エラーコード】
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
【形式】
ERR so_connect (W s, SOCKADDR *nam, W namlen)
【パラメータ】
W s ソケットデスクリプタ
SOCKADDR *na m アドレス
W namlen アドレスのバイト長
【リターン値】
=0 正常
<0 エラー
【解説】
s
が SOCK_DGRAM
型ソケットの場合は、
ソケットに関連づけられる通信先のアドレスを指定する。
s
が SOCK_STREAM
型ソケットの場合は、
指定されたアドレスへの接続を行なう。
【エラーコード】
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_BADF ソケットが無効。
EX_FAULT 名前(アドレス)が不正。
EX_HOSTUNREACH 接続先が不正。
EX_INPROGRESS ソケットが非ブロック型で、接続がすぐに完了しない。
EX_TIMEDOUT タイムアウト。
EX_CONNABORTED 接続がアボートされた。
【形式】
WERR so_fcntl (W s, W cmd, W arg)
【パラメータ】
W s ソケットデスクリプタ
W cmd 以下
F_GETFL デスクリプタ状態フラグを取得する
F_SETFL デスクリプタ状態フラグを設定する
W arg フラグ値
【リターン値】
≧0 フラグ値(F_GETFL)
<0 エラー
【解説】
ソケットデスクリプタの状態フラグを取得/設定する。
有効なフラグ値は O_NDELAY
のみである。
O_NDELAY
を指定されたソケットは非ブロック状態となり、
ソケットに関連したシステムコールでは待ちに入らなくなる。
【エラーコード】
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
so_gethostbyname |
|
名前によるホスト情報の取得 |
|
【形式】
ERR so_gethostbyname (B *nam, HOSTENT *hp, B *buf)
【パラメータ】
B* nam ホスト名
HOSTENT *hp ホスト情報
B *buf 作業領域
【リターン値】
=0 正常
<0 エラー
【解説】
nam
で指定された名前を持つホストに関する情報を
hp
で指定された領域に格納する。
B buf[HBUFLE]
で定義される作業領域を指定する必要がある。
hp
が指す領域には以下の情報が戻される。
struct hostent { /* structure for gethostbyname */
char *h_name; /* official name of host */
char **h_aliases; /* alias list */
int h_addrtype; /* host address type */
int h_length; /* length of address */
char **h_addr_list; /* list of addresses from nameserver */
#define h_addr h_addr_list[0]
/* address, for backward compatiblity */
};
h_name ホストの正式名
h_aliases ホストのエイリアス名(実装では NULL が戻る)
h_addrtype アドレスタイプ(常に AF_INET が戻る)
h_length アドレスのバイト長
h_addr_list ホストのネットワークアドレスのリストへのポインタ
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_HOSTUNREACH 指定されたホストが見つからない。
EX_TIMEDOUT タイムアウト。
so_gethostbyaddr |
|
アドレスによるホスト情報の取得 |
|
【形式】
ERR so_gethostbyaddr (B *addr, W type, W len, HOSTENT *hp, B *buf)
【パラメータ】
B *addr アドレス
W type アドレスタイプ(AF_INET のみ指定可能)
W len アドレスのバイト長
HOSTENT *hp ホスト情報
B *buf 作業領域
【リターン値】
=0 正常
<0 エラー
【解説】
アドレスで指定されたホストに関する情報を
hp
で指定された領域に格納する。
B buf[HBUFLE]
で定義される作業領域を指定する必要がある。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_HOSTUNREACH 指定されたホストが見つからない
ERR so_getpeername |
|
接続相手の名前の取得 |
|
【形式】
ERR so_getpeername (W s, SOCKADDR *nam, W *namlen)
【パラメータ】
W s ソケットデスクリプタ
SOCKADDR *nam アドレス
W *namlen アドレスのバイト長
【リターン値】
=0 正常
<0 エラー
【解説】
ソケットに接続されている相手のアドレスを戻す。
namlen
は nam
が指す領域のサイズを指定する。
実行後は nam
に戻されたアドレスのバイト長が戻される。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
EX_FAULT 名前(アドレス)が不正。
【形式】
ERR so_getsockname (W s, SOCKADDR *nam, W *namlen)
【パラメータ】
W s ソケットデスクリプタ
SOCKADDR *nam アドレス
W *namlen アドレスのバイト長
【リターン値】
=0 正常
<0 エラー
【解説】
指定したソケットに対する現在の名前(アドレス)を戻す。
namlen
は nam
のサイズを指定する。
実行後は name
に戻されたアドレスのバイト長が戻される。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
EX_FAULT 名前(アドレス)が不正。
so_getsockopt |
|
ソケットオプションの取得 |
|
【形式】
ERR so_getsockopt (W s, W level, W optnam, B *optval, W *optlen)
【パラメータ】
W s ソケットデスクリプタ
W level レベル
W optnam オプション
B *optval オプション値
W *optlen オプションのバイト長
【リターン値】
=0 正常
<0 エラー
【解説】
ソケットに関するオプションを取得する。
level およびオプション
IPPROTO_IP
:
IP_OPTIONS optval, optlen
で IP オプションを指定
IPPROTO_TCP
:
TCP_NODELAY send
時にメッセージをただちに送信するか否かの状態取得
TCP_MAXSEG
最大メッセージ長を取得
SOL_SOCKET
:
SO_DEBUG デバッグ情報の記録フラグを取得
SO_RESUSEADDR ローカルアドレスの再使用状態を取得
SO_KEEPALIVE (未サポート)
SO_DONTROUTE 発信メッセージのためのバイパスルートの決定
SO_BROADCAST ブロードキャストメッセージの送信許可
SO_LINGER データがある場合のクローズの延期
SO_OOBINLINE 帯域内の帯域外データの受信状態
SO_SNDBUF 出力のためのバッファサイズを取得
SO_RCVBUF 入力のためのバッファサイズを取得
SO_ERROR ソケットのエラーの取得およびクリア
SO_TYPE ソケットのタイプを取得
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
EX_FAULT 不正なオプション指定。
EX_NOPROTOOPT 指定したレベルで認識されていないオプション。
so_setsockopt |
|
ソケットオプションの設定 |
|
ERR so_setsockopt (W s, W level, W optnam, B *optval, W optlen)
【パラメータ】
W s ソケットデスクリプタ
W level レベル
W optnam オプション
B *optval オプション値
W *optlen オプションのバイト長
【リターン値】
=0 正常
<0 エラー
【解説】
ソケットに関するオプションを設定する。
レベルとオプションについては so_getsockopt を参照すること。
SOL_SOCKET
レベルのオプションでは、
各オプションがトグルされる。
IPPROTO_IP
:
IP_OPTIONS optval, optlen
で IP オプションを指定
IPPROTO_TCP
:
TCP_NODELAY send
時にメッセージをただちに送信するよう指定
SOL_SOCKET
:
SO_DEBUG デバッグ情報の記録フラグをトグル
SO_RESUSEADDR ローカルアドレスの再使用状態をトグル
SO_KEEPALIVE (未サポート)
SO_DONTROUTE 発信メッセージのためのバイパスルートの決定のトグル
SO_BROADCAST ブロードキャストメッセージの送信許可をトグル
SO_LINGER データがある場合のクローズの延期を設定
SO_OOBINLINE 帯域内の帯域外データの受信状態をトグル
SO_SNDBUF 出力のためのバッファサイズを設定
SO_RCVBUF 入力のためのバッファサイズを設定
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
EX_FAULT 不正なオプション指定。
EX_NOPROTOOPT 指定したレベルで認識されていないオプション。
【形式】
WERR so_ioctl (W s, W request, W arg)
【パラメータ】
W s ソケットデスクリプタ
W request 要求
W arg 引数
【リターン値】
≧ 正常
0 エラー
【解説】
ソケットに関して特殊な処理を行なう。
request
FIONREAD
:
ソケットの受信バッファにたまっているメッセージのバイト数を
arg
を W*
とみなしてそこに戻す。
SIOCATMARK
:
ソケットが帯域外データを受信しているとき
arg
を W*
とみなしてそこに 1 を戻す。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
so_listen |
|
ソケット接続のためのlisten |
|
【形式】
ERR so_listen (W s, W backlog)
【パラメータ】
W s ソケットデスクリプタ
W backlog 最大接続要求待ちキュー数
【リターン値】
=0 正常
<0 エラー
【解説】
指定したソケットを listen 状態にする。
【エラーコード】
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
【形式】
WERR so_read (W s, B *buf, W len)
【パラメータ】
W s ソケットデスクリプタ
B *buf 受信バッファ
W len 受信バッファのバイト長
u
【リターン値】
≧0 受信したバイト数
<0 エラー
【解説】
ソケットからメッセージを受信する。
so_recv(s, buf, len, 0)
と等しい。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
EX_WOULDBLOCK ソケットが非ブロック化されていて、受信データがない。
EX_TIMEDOUT タイムアウト。
EX_CONNABORTED 接続がアボートされた。
EX_OPNOTSUP サポートされていない動作指定
【形式】
WERR so_recv (W s, B *buf, W len, W flags)
【パラメータ】
W s ソケットデスクリプタ
B *buf 受信バッファ
W len 受信バッファのバイト長
W flags 以下の OR を指定することができる
MSG_OOB 帯域外データを読み取る
MSG_PEEK ソケット上にあるデータを「のぞき見」する。
データは廃棄されず、それ以降の受信処理では、
同一データが戻る。
【リターン値】
≧0 受信したバイト数
<0 エラー
【解説】
ソケットからメッセージを受信する。
メッセージがないときは非ブロック状態の場合は
EX_WOULDBLOCK
を戻し、
それ以外では待ちに入る。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
EX_WOULDBLOCK ソケットが非ブロック化されていて、受信データがない。
EX_TIMEDOUT タイムアウト。
EX_CONNABORTED 接続がアボートされた。
EX_OPNOTSUP サポートされていない動作指定(flag 指定が無効)
【形式】
WERR so_recvfrom (W s, B *buf, W len, W flags, SOCKADDR *from, W *flen)
【パラメータ】
W s ソケットデスクリプタ
B *buf 受信バッファ
W len 受信バッファのバイト長
W flags 以下の OR を指定することができる
MSG_OOB 帯域外データを読み取る
MSG_PEEK ソケット上にあるデータを「のぞき見」する。
データは廃棄されず、それ以降の受信処理では、
同一データが戻る。
SOCKADDR *from アドレス
W *flen アドレスのバイト長
【リターン値】
≧0 受信したバイト数
<0 エラー
【解説】
ソケットからメッセージを受信する。
メッセージがないときは非ブロック状態の場合は
EX_WOULDBLOCK
を戻し、
それ以外では待ちに入る。
from
が NULL
でないときは、
メッセージの発信元のアドレスが戻される。
*flen
はアドレスのサイズを指定し、
実行後は実際のアドレスの長さが戻される。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
EX_WOULDBLOCK ソケットが非ブロック化されていて、受信データがない。
EX_TIMEDOUT タイムアウト。
EX_CONNABORTED 接続がアボートされた。
EX_OPNOTSUP サポートされていない動作指定(flag 指定が無効)
【形式】
WERR so_recvmsg (W s, MSGHDR *msg, W flags)
【パラメータ】
W s ソケットデスクリプタ
MSGHDR *msg メッセージヘッダー
W flags 以下の OR を指定することができる
MSG_OOB 帯域外データを読み取る
MSG_PEEK ソケット上にあるデータを「のぞき見」する。
データは廃棄されず、それ以降の受信処理では、
同一データが戻る。
【リターン値】
≧0 受信したバイト数
<0 エラー
【解説】
ソケットからメッセージを受信する。
メッセージがないときは非ブロック状態の場合は
EX_WOULDBLOCK
を戻し、それ以外では待ちに入る。
構造体 msghdr
で指定することができる。
caddr_t msg_name; オプションのアドレス
int msg_namelen; アドレスサイズ
struct iovec *msg_iov; 配列の分散/収集
int msg_iovlen; msg_iov にある構成要素の数
caddr_t msg_accrights; 送信または受信されたアクセス権
int msg_accrightslen;
msg_name, msg_namelen
に相手先アドレスを指定する。
指定不要のときは msg_name
は NULL
を指定する。
msg_iov
により一回の要求で分散したいくつかの場所に読み込むことができる。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
EX_WOULDBLOCK ソケットが非ブロック化されていて、受信データがない。
EX_TIMEDOUT タイムアウト。
EX_CONNABORTED 接続がアボートされた。
EX_OPNOTSUP サポートされていない動作指定(flag 指定が無効)
【形式】
WERR so_select (W nfds, fd_set *rfds, fd_set *wfds, fd_set *efds,
TIMEVAL *tmout)
【パラメータ】
W nfds 最大ソケットデスクリプタ数
fd_set *rfds 受信準備完了を調べるソケットデスクリプタの集合
fd_set *wfds 送信準備完了を調べるソケットデスクリプタの集合
fd_set *efds 例外発生を調べるソケットデスクリプタの集合
TIMEVAL *tmout タイムアウト指定
【リターン値】
>0 準備ができているデスクリプタ数
=0 タイムアウトした。
<0 エラー
【解説】
指定したソケットデスクリプタ中で、
rfds, wfds, efds
中で準備ができているソケットがあるかどうか検査する。
rfds, wfds, efds
の内容は、
準備ができているかどうかの結果が戻される。
rfds, wfds, efds
は、
関連するソケットが一つもない場合は、
それぞれ NULL
を指定することができる。
tmout
が NULL
のときは無限に待つ。
tmout
が NULL
でない場合は、
そこで指定された時間だけ待つ。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
【形式】
WERR so_write (W s, B *buf, W len)
【パラメータ】
W s ソケットデスクリプタ
B *buf 送信データ
W len 送信データのバイト長
【リターン値】
≧0 送信したバイト数
<0 エラー
【解説】
ソケットの接続先にメッセージを送信する。
so_send(s, buf, len, 0)
に等しい。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
EX_SHUTDOWN 送信は禁止されている。
EX_CONNABORTED 接続がアボートされた。
EX_MSGSIZE 送信メッセージサイズへの細分化ができなかった。
EX_NOBUFS 内部領域不足。
EX_WOULDBLOCK ソケットが非ブロック化されているが、送信により待ちにはいる。
EX_TIMEOUT タイムアウト。
【形式】
WERR so_send (W s, B *buf, W len, W flags)
【パラメータ】
W s ソケットデスクリプタ
B *buf 送信データ
W len 送信データのバイト長
W flags 以下の OR を指定することができる
MSG_OOB 帯域外データを送信する。
【リターン値】
≧0 送信したバイト数
<0 エラー
【リターン値】
【解説】
ソケットの接続先にメッセージを送信する。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
EX_SHUTDOWN 送信は禁止されている。
EX_CONNABORTED 接続がアボートされた。
EX_MSGSIZE 送信メッセージサイズへの細分化がてきなかった。
EX_NOBUFS 内部領域不足。
EX_WOULDBLOCK ソケットが非ブロック化されているが、送信により待ちにはいる。
EX_TIMEOUT タイムアウト。
【形式】
WERR so_sendto (W s, B *buf, W len, W flags, SOCKADDR *to, W tolen)
【パラメータ】
W s ソケットデスクリプタ
B *buf 送信データ
W len 送信データのバイト長
W flags 以下の OR を指定することができる
MSG_OOB 帯域外データを送信する。
SOCKADDR *to 送信先アドレス
W tolen 送信先アドレスのバイト長
【リターン値】
≧0 送信したバイト数
<0 エラー
【解説】
相手先アドレスを指定して、メッセージを送信する。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
EX_SHUTDOWN 送信は禁止されている。
EX_CONNABORTED 接続がアボートされた。
EX_MSGSIZE 送信メッセージサイズへの細分化がてきなかった。
EX_NOBUFS 内部領域不足。
EX_WOULDBLOCK ソケットが非ブロック化されているが、送信により待ちにはいる。
EX_TIMEOUT タイムアウト。
EX_HOSTUNREACH 指定された送信先が見つからない。
EX_DESTADDRREQ 送信先アドレスの指定が必要。
so_sendmsg |
|
ソケットからのメッセージ送信 |
|
【形式】
WERR so_sendmsg (W s, MSGHDR *msg, W flags)
【パラメータ】
W s ソケットデスクリプタ
MSGHDR *msg メッセージデータ
W flags 以下の OR を指定することができる
MSG_OOB 帯域外データを送信する。
【リターン値】
≧0 送信したバイト数
<0 エラー
【解説】
相手先アドレスを指定して、メッセージを送信する。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
EX_SHUTDOWN 送信は禁止されている。
EX_CONNABORTED 接続がアボートされた。
EX_MSGSIZE 送信メッセージサイズへの細分化がてきなかった。
EX_NOBUFS 内部領域不足。
EX_WOULDBLOCK ソケットが非ブロック化されているが、送信により待ちにはいる。
EX_TIMEOUT タイムアウト。
EX_HOSTUNREACH 指定された送信先が見つからない。
so_shutdown |
|
全二重接続の部分シャットダウン |
|
【形式】
ERR so_shutdown (W s, W how)
【パラメータ】
W s ソケットデスクリプタ
W how これ以降の送受信の指定
0 以降の受信の禁止
1 以降の送信の禁止
2 以降の送受信の禁止
【リターン値】
【解説】
ソケットと対応する全二重通信路のすべてまたは一部をシャットダウンする。
【エラーコード】
EX_NOBUFS
EX_PAR パラメータが不正(ソケットデスクリプタの値が不正)
EX_BADF ソケットが無効。
【形式】
WERR so_socket (W domain, W type, W protocol)
【パラメータ】
W domain 通信を行なうドメイン
PF_INET
PF_UNSPEC (PF_INET として扱われる)
W type 通信のタイプ
SOCK_STREAM
SOCK_DGRAM
W protocol プロトコル
TCP (SOCK_STREAM タイプの時)
UDP (SOCK_DGRAM タイプの時)
ICMP (SOCK_DGRAM タイプの時)
【リターン値】
≧0 ソケットデスクリプタ
<0 エラー
【解説】
ソケットを作成しそのデスクリプタを戻す。
【エラーコード】
EX_NOBUFS 内部領域不足。
EX_PROTONOSUPPORT サポートされていないタイプまたはプロトコル。
ERR so_gethostname (B *name, W nlen)
【パラメータ】
B *name ホスト名を格納する領域
W nlen name のバイト長
【リターン値】
=0 正常
<0 エラー
【解説】
現在のホスト名を戻す。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
【形式】
ERR so_sethostname (B *name, W nlen)
【パラメータ】
B *name ホスト名
W nlen ホスト名のバイト長
【リターン値】
=0 正常
<0 エラー
【解説】
現在のホスト名を指定されたものに変更する。
ホスト名は最大 31文字。
【エラーコード】
EX_ADR パラメータでアクセスが許されていない領域を参照している。
この章の目次にもどる
前頁:3.9 フォントマネージャにもどる
次頁:3.11 印刷マネージャ仕様書にすすむ