我的代码通过一个开放的套接字。此套接字可以是TCP套接字(AF_INET
)或Unix域套接字(AF_UNIX
)。如何确定打开的套接字是TCP还是unix域套接字?
根据套接字的域,它需要以不同的方式处理。特别是如果套接字绑定到一个地址,那么我可能想要以不同的方式传入连接。
确定我传递的套接字是否是unix域套接字或TCP套接字的最佳方法是什么?该解决方案至少需要在OS X和Linux上运行。
getsockopt
似乎允许获得插座的类型(例如SOCK_STREAM
等),但不是域。
getsockname
将为OSX上的unix域套接字返回零长度,但这是正式的bug,而Linux的行为是different。