1. ホーム
  2. c

[解決済み] ソケット connect() と bind() の比較

2022-05-09 11:27:47

質問

両方 connect()bind() システムコールは、ソケットファイル記述子をアドレス(通常はip/portの組み合わせ)に「関連付け」ます。これらのプロトタイプは次のようなものです。

int connect(int sockfd, const struct sockaddr *addr,
               socklen_t addrlen);

そして

int bind(int sockfd, const struct sockaddr *addr,
            socklen_t addrlen);

2つの呼び出しの正確な違いは何ですか?どのような場合に connect()bind() ?

具体的には、いくつかのサーバ・クライアントコードのサンプルで、クライアントが connect() を使用し、サーバーは bind() を呼び出します。理由がよくわかりませんでした。

解決方法は?

理解を深めるために、バインドとコネクトがどのような場面で登場するのかを見てみましょう。

さらに、スーラヴが明らかにしたように、2つのコールの位置付けについて。

bind() はソケットとローカルアドレスを関連付けます。 connect() は、リモート [サーバ] アドレスに接続するために使われます。

特定の役割とそれに対応する実装があるため、(同じマシンにクライアントとサーバーがある場合でも)これらを使い分けることはできません。

私はさらに、これらの呼び出しをTCP/IPハンドシェイクと関連付けることをお勧めします。

では、ここで誰がSYNを送るかというと、それはconnect()です。bind()は通信のエンドポイントを定義するために使用されます。

お役に立てれば幸いです。