【发布时间】:2015-03-05 22:15:10
【问题描述】:
引用getaddrinfo的规范:
如果指定了
AI_PASSIVE标志,则返回的地址信息应适用于绑定套接字以接受指定服务的传入连接。在这种情况下,如果nodename参数为空,则套接字地址结构的IP 地址部分应设置为INADDR_ANY(对于IPv4 地址)或IN6ADDR_ANY_INIT(对于IPv6 地址)。
这是有道理的。如果指定AI_PASSIVE,则可以在返回地址上bind()/listen()/accept()。如果nodename 为空,则返回的地址将绑定到所有网络接口,因此您可以使用计算机的任何 IP 地址(例如以太网 LAN IP、Wi-Fi LAN IP、环回地址等)。摘要:在服务器上使用AI_PASSIVE(用于TCP套接字)。
继续:
如果未指定
AI_PASSIVE标志,则返回的地址信息应适用于对connect()的调用(对于连接模式协议)或对connect()、sendto()或@ 的调用987654336@(用于无连接协议)。在这种情况下,如果nodename参数为空,则套接字地址结构的IP 地址部分应设置为环回地址。
这也是有道理的。如果您不指定AI_PASSIVE,则可以在返回的地址上connect()/sendto()/sendmsg()。如果nodename 为空,您将获得环回地址。摘要:不要在客户端使用AI_PASSIVE(用于 TCP 套接字)。
继续:
如果
nodename参数不为空,则应忽略AI_PASSIVE标志。
嗯? 忽略 AI_PASSIVE 标志是什么意思?从前两个引号中,听起来AI_PASSIVE 仅用于确定您是否获得适合服务器/客户端使用的地址,而在这两种情况下,这听起来像一个空nodename 只是给您一个INADDR_ANY 地址(对于服务器)或环回地址(对于客户端)。 忽略 AI_PASSIVE 标志有什么好处?
最后这句话的真正含义是什么?它如何影响前两个引号?
【问题讨论】:
标签: c++ c sockets networking posix