私はソケットプログラミングが初めてなので、この質問が基本的なものであれば許してください。どこにも答えが見つかりませんでした。
新しいソケットが必要になるとはどういうことですか?
たとえば、同じポートの同じソケット fd で送受信できるようです。1つのソケットでポートXXXXで送信し、ポートYYYYで受信できますか? そうでない場合、ソケットはホスト/ポートの組み合わせに固有のものですか?
洞察をありがとう!
ポート番号はローカル プロパティであり、受信側マシンのそのポート宛ての着信データのソケット エンドポイントを識別するのに役立ちます。各マシンには、プロトコルの種類 (TCP または UDP) ごと、およびファミリの種類 (IPv4 または IPv6) ごとに 64K のポートがあります。
UDP を使用すると、さまざまなポートにある多くのクライアントに送信 (および受信) することができます。したがって、次の接続の場合:
UDP_socketA (port p1) <---------> UDP socketB (port p2)
|
|
|
|
UDP socketC (port p3)
したがって、socketA は、異なるポート番号に座っていても、socketB と socketC にデータを送信できます。それが機能する方法は、UDP ソケットでは、通常 sendto() API を使用して、各パケットの IP アドレスとポート番号を指定できるようにすることです。したがって、1 つのパケットをポート B に送信し、次のパケットをポート C に送信できます。
ただし、TCP の場合はそうではありません。接続が確立されると、socketA と socketB の間で言うと、方法はありません。これらのソケットのいずれかが socketC と通信することはできません。
TCP_socketA (port p1) <---------> TCP socket B (port p2)
|
|
|
|
TCP socketC (port p3)
ソケットは、IP アドレスとポートで構成される「エンドポイント」を確立します。
はい、単一のソケットは単一のホスト/ポートの組み合わせに固有です。
読書の推奨事項:
Beej のネットワーク プログラミング ガイド:
Unix ネットワーク プログラミング: Stevens 他: