如果我错了,请纠正我,但我对发送原始数据包的理解不可避免地被定义为在数组中缓冲字节数组,并将其写入套接字。然而,到目前为止,我看到的大多数示例代码都倾向于使用sendto,很少使用send,而且除了自己使用write之外,我从未见过其他代码。我是不是遗漏了什么?这种明显的专注于复杂的代码是什么?
在我看来,在处理原始套接字时,send和sendto是显而易见的选择,为什么要使用write?
发布于 2016-02-08 22:10:22
sendto通常用于未连接的UDP套接字或原始套接字。它接受一个参数,指定数据包的目标地址/端口。send和write没有这个参数,因此无法告诉数据去向。
send与TCP套接字和连接的UDP套接字一起使用。由于已经建立了连接,因此不需要指定目标,而且实际上该函数没有一个参数。
虽然write函数可以在可以使用send的地方使用,但它缺少能够在TCP上启用某些行为的flags参数。它也不返回与send相同的错误代码集,因此如果出错,您可能得不到有意义的错误代码。理论上,如果设置了原始套接字选项,也可以在原始套接字上使用write,但这也不可取,因为它不支持与send相同的错误代码。
https://stackoverflow.com/questions/35280161
复制相似问题