我最近一直在研究Linux套接字编程,这些概念在我的脑海中仍然在旋转和不稳定。有人可以确认或更正我对domain
和socket()
的{{1}}参数的理解:如果想要套接字通信,应该选择socketpair()
(或PF_LOCAL
)严格地说是在同一台计算机上,如果套接字通信是在不同的计算机之间,那么应该选择PF_UNIX
- 这是正确的吗?
答案 0 :(得分:1)
不,它是您要使用的通信域。查看socket
的{{3}}。例如,AF_INET
表示v4互联网协议,AF_INET6
表示v6互联网协议,AF_APPLETALK
表示AppleTalk,等等。您几乎肯定想要AF_INET
或AF_INET6
。
您与之通信的其他程序是否在同一台机器上是否真的相关,因为您可以使用互联网协议与本地主机进行通信。
但是,使用互联网域协议会产生很小的性能损失。如果您的应用程序将仅连接到同一台计算机上的其他应用程序,则使用AF_LOCAL/AF_UNIX
域将更快,并将为您提供一些额外的优势,例如套接字上的文件级安全控制。请注意,如果您走这条路线,您将无法在不同计算机之间使用您的代码而无需修改它。
可以找到关于这种选择的利弊的一个很好的讨论man page。