WinSockのRAWソケットで同じIPアドレスからの受信待ちをするアプリケーションが複数あった場合に競合して通信が行えなくなるのではないかと思いました。
例えば、コマンドプロンプトを複数開いて同じIPアドレスに対して、同時にPINGパケットを送信した場合に応答パケットのIPヘッダーまたはICMPヘッダーの内容だけで、どのように送信アプリケーションを特定しているのでしょうか。
それともReceive関数の実行が排他的になっているのでしょうか。
下記はC#でRAWソケットを使って、PINGを実装した時のコードの一部抜粋です。
SendTo後にReciveFromで受信しますが、このアプリケーションを2つ同時に実行しても
競合せずにそれぞれPINGの応答を受信できています。
C#
1Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Raw, ProtocolType.Icmp); 2//~略~ 3socket.SendTo(icmpSendData,0,sendLength,SocketFlags.None,remote); 4//~略~ 5ret = socket.ReceiveFrom(reciveBuff, ref remote);
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/23 12:23