我需要确定我的代码未创建的句柄是否GetFileType()==FILE_TYPE_PIPE
是套接字。似乎没有用于此的 API。
我尝试了以下方法。总体思路是使用特定于套接字的函数,并将失败视为非套接字。
getsockopt()
——这是我的第一次尝试。不幸的是,当被同一个(非套接字)句柄上的许多线程调用时,它似乎挂起。WSAEnumNetworkEvents()
-- 这就是 Gnulib 所做的,但如果句柄是套接字,则会产生不良的副作用。getpeername()
- 这就是 cygwin 所做的,但对于某些套接字也会失败。猜测错误是否意味着套接字性似乎并不可靠且未来安全。
我不介意该解决方案是否仅适用于某些版本的 Windows,例如 Vista,在一般情况下我总是可以使用其他方法。