实战经验:通过NotifyAddrChange侦测网络变化( 五 )

在此模式下 , 也即我们将它的两个参数都设置成NULL 。 调用函数后 , 函数将阻塞 , 直到系统侦测到IP地址发生变化 。 如果该函数返回后 , 继续调用它 , 则它继续阻塞 , 直到下一个IP地址变化事件发生 。

2) 异步模式

如果我们给它传入一个OVERLAPPED结构时 , 此函数将以异步模式执行 。 也即上面已经描述过的 , NotifyAddrChange调用将立即完成并返回WSA_IO_PENDING(执行成功的情况下) 。 我们可以利用OVERLAPPED这个结构来调用GetOverlappedResult来接收IP地址变化这一事件通知 。

如何取消

使用CancelIPChangeNotify这一函数可以取消对IP地址变化的侦测 , 这种情况一般发生在:

1) 用户显式取消侦测功能

用户可能会通过GUI来表达此需求 , 此时 , NotifyAddrChange已经处于阻塞(同步)或其他工作线程已经在WaitForSingleObject(异步)了 , 使用CancelIPChangeNotify这一调用 , 可以立即触发NotifyAddrChange返回(同步)或WaitForSingleObject(异步)返回 。

推荐阅读