这个表摘自《Unix Network Programming》,我以为它适用与所有平台,其实不然。现有以下假设:
- 同时与IPv4和IPv6地址类型的远程主机通讯。
- 本地主机安装了双协议栈。
- 只能用一个端口。
那么在不同平台下则编程策略不同:
- linux下遵循上表中的规则,只有在本地IPv6地址和端口绑定socket,即可与远程IPv4或IPv6主机通讯,操作系统会选择适当协议。
- windows下则需要绑定两个socket,分别创建IPv4地址族的socket绑定到本地IPv4地址和端口和创建IPv6地址族socket绑定到本地IPv6地址和端口。
上述中的地址均为通配地址。如果在Linux下绑定两个socket到IPv4和IPv6地址的同一端口,则在第二次绑定时会报错。