Unix-system-calls-bind
[top]#
[[File:]]
[[File:]] |
|Web |This Site
- 初心者向けのUnix *
- Unix-ホーム
- Unix-はじめに
- Unix-ファイル管理
- Unix-ディレクトリ
- Unix-ファイル権限
- Unix-環境
- Unix-基本ユーティリティ
- Unix-パイプとフィルタ
- Unix-プロセス
- Unix-コミュニケーション
- Unix-The Vi Editor
- Unix Shellプログラミング*
- Unix-シェルとは?
- Unix-変数の使用
- Unix-特殊変数
- Unix-配列の使用
- Unix-基本的な演算子
- Unix-意思決定
- Unix-シェルループ
- Unix-ループ制御
- Unix-シェル置換
- Unix-引用メカニズム
- Unix-IOリダイレクト
- UNIX-シェル関数
- Unix-マンページヘルプ
- 高度なUnix *
- Unix-正規表現
- Unix-ファイルシステムの基本
- Unix-ユーザー管理
- Unix-システムパフォーマンス
- Unix-システムログ
- Unix-信号とトラップ
- Unixの便利なリファレンス*
- Unix-便利なコマンド
- Unix-クイックガイド
- Unix-組み込み関数
- Unix-システムコール
- Unix-コマンドリスト
- Unixの役立つリソース*
- Unix役立つリソース
選択した読書
- http://www.finddevguides.com/computer_glossary [コンピュータ用語集] *http://www.finddevguides.com/computer_whoiswho[Who is Who]
Copyright©2014 by finddevguides
Home | References | Discussion Forums | About TP |
bind()-Unix、Linuxシステムコール
[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]
広告
NAME
bind-名前をソケットにバインドします
概要
#include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, const struct sockaddr* my_addr ", socklen_t " addrlen ); |
説明
通常、 SOCK_STREAM ソケットが接続を受信する前に、 bind ()を使用してローカルアドレスを割り当てる必要があります( accept (2)を参照)。
名前バインディングで使用される規則は、アドレスファミリによって異なります。 詳細については、セクション7のマニュアルエントリを参照してください。 AF_INET については ip (7)を、 AF_INET6 については ipv6 (7)を、 AF_UNIX については unix (7)を、 AF_APPLETALK については ddp (7)を、を参照AF_PACKET *は *packet (7)、 AF_X25 は x25 (7)、 AF_NETLINK は netlink (7)を参照してください。
_my_addr_引数に渡される実際の構造は、アドレスファミリによって異なります。 _sockaddr_構造は次のように定義されます:
struct sockaddr { sa_family_t sa_family; char sa_data[14]; } |
この構造体の唯一の目的は、_my_addr_で渡された構造体ポインターをキャストして、コンパイラの警告を回避することです。 次の例は、Unix( AF_UNIX )ドメインでソケットをバインドするときにこれがどのように行われるかを示しています。
#include <sys/socket.h> #include <sys/un.h> #include <stdlib.h> #include <stdlio.h> #define MY_SOCK_PATH "/somepath" int main(int argc, char *argv[]) { int sfd; struct sockaddr_un addr; sfd = socket(AF_UNIX, SOCK_STREAM, 0); if (sfd == -1) { perror("socket"); exit(EXIT_FAILURE); } memset(&addr, 0, sizeof(struct sockaddr_un)); /*Clear structure*/ addr.sun_family = AF_UNIX; strncpy(addr.sun_path, MY_SOCK_PATH, sizeof(addr.sun_path) - 1); if (bind(sfd, (struct sockaddr *) &addr, sizeof(struct sockaddr_un)) == -1) { perror("bind"); exit(EXIT_FAILURE); } ... } |
返り値
成功すると、ゼロが返されます。 エラーの場合、-1が返され、_errno_が適切に設定されます。
エラー
エラーコード
説明
アドレスは保護されており、ユーザーはスーパーユーザーではありません。
指定されたアドレスはすでに使用されています。
_sockfd_は有効な記述子ではありません。
ソケットはすでにアドレスにバインドされています。
_sockfd_は、ソケットではなくファイルの記述子です。
次のエラーは、UNIXドメイン( AF_UNIX )ソケットに固有のものです。
パスプレフィックスのコンポーネントに対する検索許可が拒否されました。 ( path_resolution (2)も参照してください。)
存在しないインターフェイスが要求されたか、要求されたアドレスがローカルではありませんでした。
_my_addr_は、ユーザーのアクセス可能なアドレス空間の外側を指します。
_addrlen_が間違っているか、ソケットが AF_UNIX ファミリーにありませんでした。
_my_addr_の解決中に検出されたシンボリックリンクが多すぎます。
_my_addr_が長すぎます。
ファイルが存在しません。
カーネルメモリが不足していました。
パスプレフィックスのコンポーネントはディレクトリではありません。
ソケットiノードは、読み取り専用ファイルシステムに常駐します。
BUGS
透過プロキシオプションは説明されていません。
準拠
SVr4、4.4BSD( bind ()関数は4.2BSDで初めて登場しました)。
NOTE
関連項目
[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]
広告
Advertisements |