0

GetOverlappedResults()はまったく戻りません。
以下の簡単な例を実行しました。ネットワーク インターフェイスで IP アドレスが変更されると、手動リセット イベントが設定され、「IP アドレス テーブルが変更されました..」という出力が表示されますが、bWait が false であっても GetOverlappedResults() は返されません。 . bWait = true の場合でも、イベントが設定されているため、I/O 操作が完了するため、返されるはずです。

何が起こっている?

#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <windows.h>

#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")

void main()
{
    OVERLAPPED overlap;
    DWORD ret, nr;
    HANDLE hand = NULL;
    overlap.hEvent = CreateEvent(NULL, true, false, NULL);

    ret = NotifyAddrChange(&hand, &overlap);

    for (;;)
    {
        if ( WaitForSingleObject(overlap.hEvent, INFINITE) == WAIT_OBJECT_0 )
        {
            printf("IP Address table changed..\n");
            ret = GetOverlappedResult(hand, &overlap, &nr, false);
            scanf_s("%d %d\n", ret, nr);
            printf("done\n");
            NotifyAddrChange(&hand, &overlap);
            ResetEvent(overlap.hEvent);
        }
    }
}
4

1 に答える 1