2010-12-07 7 views
4

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

以下のテストコードは、私のマシン上の問題を示しています。テストプログラムを実行して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; 
} 
+0

問題が発生したときに「最初のメッセージは送信されません」という出力が得られますか? – sje397

+0

いいえ、sendtoは常に成功を返します。 – briangreenery

答えて

3

問題は基本的にthis postと同じであり、それはRFC 1122のセクション2.3.2.2に関係しています:

2.3.2.2 ARPパケットキュー

リンク層は、すべきです( 破棄ではなく) パケットの各セットのパケットが同一の未解決IPアドレスに宛てられた を保存し( 破棄)、 が アドレスが解決されました。

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

+0

+1ニースが見つかりました... –

関連する問題