本节书摘来自异步社区《UNIX网络编程 卷1:套接字联网API(第3版)》一书中的第1章,第1.3节,作者:【美】W. Richard Stevens , Bill Fenner , Andrew M. Rudoff著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.3 协议无关性
图1-5中的程序是与IPv4协议相关的:我们分配并初始化一个sockaddr_in类型的结构,把该结构的协议族成员设置为AF_INET,并指定socket函数的第一个参数为AF_INET。
为了让图1-5中的程序能够在IPv6上运行,我们必须修改这段代码。图1-6所示的是一个能够在IPv6上运行的版本,其中改动之处用加粗的等宽字体突出显示。
我们只修改了程序的5行代码,得到的却是另一个与协议相关的程序:这回是与IPv6协议相关的。更好的做法是编写协议无关的程序。图11-11将给出本客户程序的协议无关版本,它使用了getaddrinfo函数(由tcp_connect函数调用)。
这两个程序的另一个不足之处是:用户必须以点分十进制数格式给出服务器的IP地址(如适合于IPv4版本的206.168.112.219)。人们更习惯于用名字(如www.unpbook.com)来代替数字。我们将在第11章中讨论主机名与IP地址之间以及服务名与端口之间的转换函数。我们特意推迟讨论这些函数,在第11章之前继续使用IP地址和端口号,目的是了解我们必须填写和查看的套接字地址结构的细节,避免被另一个函数集的细节把网络编程的讨论搞复杂了。