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