JM プロジェクトは、主に Linux 関連のマニュアルページの日本語ページを翻訳・公開しています。
... ial) を 送受信することもできる。 アドレスのフォーマット UNIX ドメインソケットのアドレスは以下の構造体で表現される。 struct sockaddr_un { sa_family_t sun_family; /* AF_UNIX */ char sun_path[108]; /* Pathname */ }; The sun_family field always contains AF_U ... is 108 bytes in size; see also NOTES, below. 様々なシステムコール (例えば bind (2), connect (2), sendto (2)) は入力として sockaddr_un 引数を取る。 他のいくつかのシステムコール (例えば getsockname (2), getpeername (2), recvfrom (2), accept (2)) はこの型の ... 引数を返す。 sockaddr_un 構造体では 3 種類のアドレスが区別される。 * pathname (パス名) : bind (2) を使って、UNIX ドメインソケットを、 ヌル終端さ ... ... ) を、 AF_NETLINK は netlink (7) を参照。 addr 引数に実際にどのような構造体が渡されるかは、 アドレスファミリーに依存する。 sockaddr 構造体は以下のような感じで定義されている: struct sockaddr { sa_family_t sa_family; char sa_data[14]; } この構造体は、 addr ... dle_error(msg) \ do { perror(msg); exit(EXIT_FAILURE); } while (0) int main(int argc, char *argv[]) { int sfd, cfd; struct sockaddr_un my_addr, peer_addr; socklen_t peer_addr_size; sfd = socket(AF_UNIX, SOCK_STREAM, 0); if (sfd == -1) handle_error("socke ... my_addr.sun_family = AF_UNIX; strncpy(my_addr.sun_path, MY_SOCK_PATH, sizeof(my_addr.sun_path) - 1); if (bind(sfd, (struct sockaddr *) &my_addr, sizeof(my_addr)) == -1) handle_error("bind"); if (listen(sfd, LISTEN_BACKLOG) == -1) handle_error("listen"); ... ... トが取得すると、 発信元アドレスが v6 にマップされ、その接続 (パケット) も v6 にマップされる。 アドレスのフォーマット struct sockaddr_in6 { sa_family_t sin6_family; /* AF_INET6 */ in_port_t sin6_port; /* port number */ uint32_t sin6_flowinfo; /* IPv6 flow ... デフォルト値は 0 (偽) である。 エラー ENODEV ユーザーがリンクローカルの IPv6 アドレスを bind (2) しようとしたが、 指定された sockaddr_in6 構造体の sin6_scope_id が 有効なインターフェースのインデックスでなかった。 バージョン Linux 2.4 では 64 ビットのホスト ... に対して sockaddr_in6 のバイナリ互換性が保たれていない。 in6_addr のアラインメントが変更され、また sin6_scope_id フィールドが新たに追加された ... ... Next item in list */ char *ifa_name; /* Name of interface */ unsigned int ifa_flags; /* Flags from SIOCGIFFLAGS */ struct sockaddr *ifa_addr; /* Address of interface */ struct sockaddr *ifa_netmask; /* Netmask of interface */ union { struct sockaddr *if ... u_broadaddr; /* Broadcast address of interface */ struct sockaddr *ifu_dstaddr; /* Point-to-point destination address */ } ifa_ifu; #define ifa_broadaddr ifa_ifu.ifu_broadaddr #define ifa_ ... dress */ if (family == AF_INET || family == AF_INET6) { s = getnameinfo(ifa->ifa_addr, (family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); if (s != 0) { printf("getnameinfo() failed: ... ... Next item in list */ char *ifa_name; /* Name of interface */ unsigned int ifa_flags; /* Flags from SIOCGIFFLAGS */ struct sockaddr *ifa_addr; /* Address of interface */ struct sockaddr *ifa_netmask; /* Netmask of interface */ union { struct sockaddr *if ... u_broadaddr; /* Broadcast address of interface */ struct sockaddr *ifu_dstaddr; /* Point-to-point destination address */ } ifa_ifu; #define ifa_broadaddr ifa_ifu.ifu_broadaddr #define ifa_ ... dress */ if (family == AF_INET || family == AF_INET6) { s = getnameinfo(ifa->ifa_addr, (family == AF_INET) ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); if (s != 0) { printf("getnameinfo() failed: ... ... f int bool_t ; typedef bool_t (* xdrproc_t ) (XDR *, void *, ...); typedef bool_t (* resultproc_t ) (caddr_t resp , struct sockaddr_in * raddr ); 型 AUTH , CLIENT , SVCXPRT , XDR の宣言についてはヘッダーファイルを参照。 void auth_destroy(AUTH * auth ); こ ... る点が異っている。回答を受け取る度に このルーティンは以下の形式の eachresult () を呼び出す。 eachresult(char * out , struct sockaddr_in * addr ); ここで out は clnt_broadcast () に渡される out と同じであるが、リモートプロシージャーからの出力がデコードされ ... 時間切れを設定した場合にはそれ以後は clnt_call () に渡される時間切れパラメーターは全て無視される。 CLGET_SERVER_ADDR struct sockaddr_in // サーバアドレスを取得する 以下の操作は UDP の場合にのみ有効である: CLSET_RETRY_TIMEOUT struct timeval // 再送間隔を設 ... ... f int bool_t ; typedef bool_t (* xdrproc_t ) (XDR *, void *, ...); typedef bool_t (* resultproc_t ) (caddr_t resp , struct sockaddr_in * raddr ); 型 AUTH , CLIENT , SVCXPRT , XDR の宣言についてはヘッダーファイルを参照。 void auth_destroy(AUTH * auth ); こ ... る点が異っている。回答を受け取る度に このルーティンは以下の形式の eachresult () を呼び出す。 eachresult(char * out , struct sockaddr_in * addr ); ここで out は clnt_broadcast () に渡される out と同じであるが、リモートプロシージャーからの出力がデコードされ ... 時間切れを設定した場合にはそれ以後は clnt_call () に渡される時間切れパラメーターは全て無視される。 CLGET_SERVER_ADDR struct sockaddr_in // サーバアドレスを取得する 以下の操作は UDP の場合にのみ有効である: CLSET_RETRY_TIMEOUT struct timeval // 再送間隔を設 ... ... f int bool_t ; typedef bool_t (* xdrproc_t ) (XDR *, void *, ...); typedef bool_t (* resultproc_t ) (caddr_t resp , struct sockaddr_in * raddr ); 型 AUTH , CLIENT , SVCXPRT , XDR の宣言についてはヘッダーファイルを参照。 void auth_destroy(AUTH * auth ); こ ... る点が異っている。回答を受け取る度に このルーティンは以下の形式の eachresult () を呼び出す。 eachresult(char * out , struct sockaddr_in * addr ); ここで out は clnt_broadcast () に渡される out と同じであるが、リモートプロシージャーからの出力がデコードされ ... 時間切れを設定した場合にはそれ以後は clnt_call () に渡される時間切れパラメーターは全て無視される。 CLGET_SERVER_ADDR struct sockaddr_in // サーバアドレスを取得する 以下の操作は UDP の場合にのみ有効である: CLSET_RETRY_TIMEOUT struct timeval // 再送間隔を設 ... ... f int bool_t ; typedef bool_t (* xdrproc_t ) (XDR *, void *, ...); typedef bool_t (* resultproc_t ) (caddr_t resp , struct sockaddr_in * raddr ); 型 AUTH , CLIENT , SVCXPRT , XDR の宣言についてはヘッダーファイルを参照。 void auth_destroy(AUTH * auth ); こ ... る点が異っている。回答を受け取る度に このルーティンは以下の形式の eachresult () を呼び出す。 eachresult(char * out , struct sockaddr_in * addr ); ここで out は clnt_broadcast () に渡される out と同じであるが、リモートプロシージャーからの出力がデコードされ ... 時間切れを設定した場合にはそれ以後は clnt_call () に渡される時間切れパラメーターは全て無視される。 CLGET_SERVER_ADDR struct sockaddr_in // サーバアドレスを取得する 以下の操作は UDP の場合にのみ有効である: CLSET_RETRY_TIMEOUT struct timeval // 再送間隔を設 ... ... f int bool_t ; typedef bool_t (* xdrproc_t ) (XDR *, void *, ...); typedef bool_t (* resultproc_t ) (caddr_t resp , struct sockaddr_in * raddr ); 型 AUTH , CLIENT , SVCXPRT , XDR の宣言についてはヘッダーファイルを参照。 void auth_destroy(AUTH * auth ); こ ... る点が異っている。回答を受け取る度に このルーティンは以下の形式の eachresult () を呼び出す。 eachresult(char * out , struct sockaddr_in * addr ); ここで out は clnt_broadcast () に渡される out と同じであるが、リモートプロシージャーからの出力がデコードされ ... 時間切れを設定した場合にはそれ以後は clnt_call () に渡される時間切れパラメーターは全て無視される。 CLGET_SERVER_ADDR struct sockaddr_in // サーバアドレスを取得する 以下の操作は UDP の場合にのみ有効である: CLSET_RETRY_TIMEOUT struct timeval // 再送間隔を設 ... 日本語の文書やマニュアルを配布している個人/プロジェクトへのリンクです。