ソケットファイルを生成するにはAF_INETが必要ですか?

ソケットファイルを生成するにはAF_INETが必要ですか?

に関する情報です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_INET6ipv6(7)AF_UNIXpacket(7)AF_X25x25(7)AF_NETLINKnetlink(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_INETIPアドレスバインディング、およびさまざまな形式(ユニキャスト、マルチキャスト、ブロードキャスト...)で通信を生成するために使用されます。

関連情報:

関連情報