我的代碼通過一個開放的套接字。此套接字可以是TCP套接字(AF_INET
)或Unix域套接字(AF_UNIX
)。如何確定打開的套接字是TCP還是unix域套接字?
根據套接字的域,它需要以不同的方式處理。特別是如果套接字綁定到一個地址,那麼我可能想要以不同的方式傳入連接。
確定我傳遞的套接字是否是unix域套接字或TCP套接字的最佳方法是什麼?該解決方案至少需要在OS X和Linux上運行。
getsockopt
似乎允許獲得插座的類型(例如SOCK_STREAM
等),但不是域。
getsockname
將爲OSX上的unix域套接字返回零長度,但這是正式的bug,而Linux的行爲是different。