に関する情報ですAF_INET
。
同じホスト内で通信するためのAF_UNIX
ソケットファイルの例を作成します。/tmp/name_of_the_socket_file
AF_INET
、ソケットファイルを作成する必要がありますか?
AFAIK、ソケットファイルを作成する必要はなく、AF_INET
単純なクライアントおよびサーバーモデルと通信できます。
私の同僚は、IPアドレスをファイル名としてソケットファイルを作成する必要があると述べましたAF_INET
。わかりませんが、誰かが私を明確に説明できますか?
答え1
同僚は私に必要だと言った。
AF_INET
あなたの同僚が間違っていた。マンページを見てくださいbind(2)
さまざまなソケットタイプにルールがあることがわかります。
名前バインディングに使用されるルールは、アドレス系列によって異なります。詳細については、セクション7のマニュアルを参照してください。については を
AF_INET
参照し、 については を参照してください。ip(7)
AF_INET6
ipv6(7)
AF_UNIX
packet(7)
AF_X25
x25(7)
AF_NETLINK
netlink(7)
あなたは見るでしょうip(7)
ファイルを生成するための呼び出しはありませんAF_INET
。そしてこの素晴らしいものIBM論文このソケット構造とそのいくつかの歴史について説明します。レガシー構造形式 (BSD 4.4/Unix 98):
struct sockaddr_in {
uint8_t sin_len;
sa_family_t sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
現在の構造:
struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
};
/* Internet address. */
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};
ファイルの作成に関する言及はありません。
他の部分から引用ip(7)
このソケット(AF_INET
)がどのように機能するかについてのマニュアルページ:
プロセスが新しく着信パケットまたは接続を受信するには、ソケットをローカルインターフェイスアドレスにバインドする必要があります
bind(2)
。この場合、1つのIPソケットのみが指定されたローカル(アドレス、ポート)ペアにバインドできます。バインディング呼び出しで指定すると、INADDR_ANY
ソケットはすべてのローカルインターフェイスにバインドされます。listen(2)
バインドされていないソケットから呼び出されると、ソケットは自動的にローカルアドレスがに設定されている任意の使用可能なポートにバインドされますINADDR_ANY
。バインドされていないソケットから呼び出されると、connect(2)
ソケットは自動的に任意の使用可能なポートまたはローカルアドレスが設定されている使用可能な共有ポートにバインドされますINADDR_ANY
。
--せん断--
住所形式
IPソケットアドレスは、IPインタフェースの組み合わせとして定義されます。 アドレスと16ビットポート番号。デフォルトのIPプロトコルはポート番号を提供せず、udp(7)やtcp(7)などの高レベルのプロトコルとして実装されています。 raw ソケットでは、sin_port が IP プロトコルに設定されます。
しかし、あなたが見るとunix(7)
AF_UNIX
マンページでは、ソケットタイプと基本構造のいくつかの例を見ることができます。ソケットファイルパスと呼ばれるフィールドもありますsun_path
(以下の関連トピックを参照)。
#define UNIX_PATH_MAX 108
struct sockaddr_un {
sa_family_t sun_family; /* AF_UNIX */
char sun_path[UNIX_PATH_MAX]; /* pathname */
};
TL、博士: AF_UNIX
ソケット(ファイルを使用)とAF_INET
IPアドレスバインディング、およびさまざまな形式(ユニキャスト、マルチキャスト、ブロードキャスト...)で通信を生成するために使用されます。
関連情報: