• ベストアンサー

bind()を呼び出さなくてもよい理由

開発言語:C soccket(AF_INET, SOCK_DGRAM, 0)での通信時 サーバ側ではrecv()を行なうためにはbind()しますが、 クライアント側では、send()を行なうために明示的にbind()を行なわずにプログラムが動作しています。 この動作理由を教えて頂けませんか。 また、クライアント側において送受信を行なう場合にはsend()を呼び出した後に、 recv()を呼び出す場合にはbind()を必要としないプログラムを見た事あるのですが、 その動作理由が分かりません。 これについても合わせて教えて頂けると助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

サーバでbind()を行うのは、サーバが接続を待ち受ける窓口(ポート)を指定するためです。サーバの窓口はクライアントからのアクセスをOSがサーバ・プロセスに振り分けるために指定しておかないといけません。幾つものサーバ・プロセスが同じ窓口で待つことはできないのです。 クライアント側はサーバの窓口に向けてconnect()で接続しにいきます。 読み(recv)書き(send)のどちらを行うかには関係ありません。

その他の回答 (1)

  • DIooggooID
  • ベストアンサー率27% (1730/6405)
回答No.1