11.5 小 结
本章介绍了网络套接字编程中比较高级的知识,通常这些知识只有在比较特殊的情况下才会使用,但是某些知识却是经常使用而不会察觉的,例如广播和多播。本章中利用广播获得服务器IP地址的方法是一个比较实用的案例,在完备的网络应用程序中经常使用。
除了以上的知识,还有一些高级套接字的知识,限于篇幅没有进行介绍,例如带外数据、IP选项、路由套接字接口等。
带外数据指当连接中的双方如果有紧急的事情想要通知对方,发送高优先级数据。在发送的时候,发送函数的选项部分通常使用MSG_OOB,例如:
send(s, "URG",3,MSG_OOB);
而接收方则会接收到SIGURG的信号,根据此信号,接收方接收带外数据。
可以使用函数sockatmark()来测试是否有带外数据存在。
IP选项是在20个字节的空间之外的IP设置,通常的IPv4选项为IP源路径选项,用于记录数据报经过的主机路径,即路由器地址的集合。
路由套接字选项使用控制字来设置路由的特性,例如增加删除路由、路径信息、测度等信息。通常的程序设计框架为:
s = socket(AF_ROUTE, SOCK_RAW,0);
struct rt_msghdr rtm;
/*设置rtm*/
...
write(s, rtm, rtm->rtm_msglen);
即建立一个AF_ROUTE的套接字文件描述符,设置路由消息struct rt_msghdr结构,通过发送和接收来控制消息。