ツール - windows msg



Windows 7/2008 R2でソケットメッセージが送信されないことがある (1)

ここの問題は、 この記事と基本的に同じであり、RFC 1122のセクション2.3.2.2と関係しています。

2.3.2.2 ARPパケットキュー

リンク層は、同じ未解決のIPアドレス宛てのパケットの各セットの少なくとも1つ(最新の)パケットを保存し(破棄するのではなく)、そのアドレスが解決されたときに保存したパケットを送信すべきである(SHOULD)。

UDPメッセージごとに新しいソケットを開くのが回避策です。

https://src-bin.com

Windows 7上で2つのUDPメッセージをコンピュータに送信すると、最初のメッセージがまったく送信されないことがあるようです。 他の誰かがこれを経験しましたか?

以下のテストコードは、私のマシン上の問題を示しています。 テストプログラムを実行して10.10.42.22へのすべてのUDPトラフィックを監視すると、2番目のUDPメッセージが送信されていますが、最初のUDPメッセージは送信されません。 直ちにプログラムを再度実行すると、両方のUDPメッセージが送信されます。

毎回失敗することはありませんが、テストをもう一度実行するまで数分間待つと通常発生します。

#include <iostream>
#include <winsock2.h>

int main()
{
 WSADATA wsaData;
 WSAStartup( MAKEWORD(2,2), &wsaData );

 sockaddr_in addr;
 addr.sin_family = AF_INET;
 addr.sin_port = htons( 52383 );
 addr.sin_addr.s_addr = inet_addr( "10.10.42.22" );

 SOCKET s = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );

 if ( sendto( s, "TEST1", 5, 0, (SOCKADDR *) &addr, sizeof( addr ) ) != 5 )
  std::cout << "first message not sent" << std::endl;

 if ( sendto( s, "TEST2", 5, 0, (SOCKADDR *) &addr, sizeof( addr ) ) != 5 )
  std::cout << "second message not sent" << std::endl;

 closesocket( s );

 WSACleanup();
 return 0;
}




winsock