一直知道sendmsg()的存在,但是,这个接口看上去比较复杂,而且,对于ipv4的tcp、udp而言,send()和sendto()已经完全够用,所以从来没有去细看。
去年年底的时候,看了情景分析中的UNIX套接字的实现,发现他们直接的关系是这样的:
1. send()是由sendto()实现的,但不需要没有指定目的地址;
2. sendto()是有sendmsg()实现的,但只指定一个缓冲区,且不发送带外数据;
3. sendmsg()提供了多缓冲区发送和带外数据发送的功能;
当时看了,但没有做实验,现在论坛上有人提出这个问题,他需要将sendmsg()替换为send()接口,所以,只需要把多个缓冲区拼接成一个就可以了,出于对他人负责的态度,我做了一下实验,恩,发送的时候,socket会按照io_vec索引的顺序发送数据的,这个,与预期一致。
有些看起来有点麻烦的技术,静下心,认真看一看,还是比较好搞懂的,要是一时真搞不懂,就记在心里啦,等知识储备足够的时候再回头搞懂也行。
阅读(1647) | 评论(0) | 转发(0) |