Sockets 中止对getaddrinfo()的调用

Sockets 中止对getaddrinfo()的调用,sockets,winsock,Sockets,Winsock,getaddrinfo()是一个阻塞函数 如何中止getaddrinfo()调用 例如,在关闭应用程序时,我希望中止对该函数的现有调用。您不能中止这样的函数调用 如果函数调用为您提供了中止或设置超时的方法,那么您可以这样做,但是这个函数调用没有,大多数函数调用也没有 但是,您可以在单独的线程中执行这些查找,现在您可以向执行这些查找的线程发出中止 注意,在线程中执行查找并中止它并不保证调用将立即结束,也不意味着线程将立即结束 如果调用行为不正常或功能不正常,则尤其如此。getaddrinfo()是

getaddrinfo()是一个阻塞函数

如何中止getaddrinfo()调用


例如,在关闭应用程序时,我希望中止对该函数的现有调用。

您不能中止这样的函数调用

如果函数调用为您提供了中止或设置超时的方法,那么您可以这样做,但是这个函数调用没有,大多数函数调用也没有

但是,您可以在单独的线程中执行这些查找,现在您可以向执行这些查找的线程发出中止

注意,在线程中执行查找并中止它并不保证调用将立即结束,也不意味着线程将立即结束

如果调用行为不正常或功能不正常,则尤其如此。

getaddrinfo()
是一个无法中止的阻塞函数


在Windows 8及更高版本上,您可以使用。Unicode版本(
GetAddrInfoExW()
)支持调用方提供的超时和重叠I/O,或者它可以返回异步任务的
句柄,然后将该句柄传递给。

具体来说,您可以使用CancelSynchronousIo尝试取消指定线程上的任何I/O操作。尤其重要的是,不要使用TerminateThread,例如,据我所知,GetAddrInfoExCancel()受到竞争条件的影响,您可能会意外取消错误的操作。(操作在调用cancel之前短时间内完成,句柄号被另一个操作重用)