无连接(数据报)套接字
到目前为止,我们主要研究了遵循面向连接模型的套接字。但是也支持无连接交互,这是当代分组交换网络中常见的数据报设施。数据报套接字为数据交换提供了一个对称接口。虽然进程仍然可能是客户机和服务器,但是不需要建立连接。相反,每条消息都包含目的地址。
数据报套接字与前面一样创建。如果需要特定的本地地址,则bind()操作必须在第一次数据传输之前进行。否则,系统将在首次发送数据时设置本地地址和/或端口。要发送数据,可以使用sendto()函数:
sendto(s, buf, buflen, flags, (struct sockaddr *)&to, tolen);
s、buf、buflen和flags参数与以前一样使用。to和tolen值指示消息的预期收件人的地址。
当使用不可靠的数据报接口时,不太可能向发送方报告任何错误。当本地存在信息以识别无法传递的消息(例如网络不可达)时,sendto()调用将返回-1,全局变量errno将包含错误编号。
要接收未连接的数据报套接字上的消息,可以使用recvfrom()函数:
recvfrom( s, buf, buflen, flags,
(struct sockaddr *)&from, &fromlen );
同样,fromlen是一个值-结果参数,最初包含from缓冲区的大小,并在返回时进行修改,以指示接收数据报的地址的实际大小。
|