如果我错了,请纠正我,但我对发送原始数据包的理解不可避免地被定义为缓冲数组中的字节数组,并将其写入套接字.但是,到目前为止我看到的大多数示例代码都倾向于使用,sendto很少send使用,而且我从未见过代码而不是我自己使用的代码write.我错过了什么吗?这种明显的关注点是这样复杂的代码是什么?
在处理原始套接字时,为什么使用send和sendto在write我看来是明显的选择?
sendto通常与未连接的UDP套接字或原始套接字一起使用.它需要一个参数来指定数据包的目标地址/端口. send并且write没有这个参数,因此没有办法告诉数据去哪里.
send与TCP套接字和连接的UDP套接字一起使用.由于已建立连接,因此不需要指定目标,实际上此函数没有一个参数.
虽然该write函数可以在可以使用的地方send使用,但它缺少flags可以在TCP套接字上启用某些行为的参数.它也不会返回相同的错误代码集send,因此如果出现问题,您可能无法获得有意义的错误代码.理论上,write如果IP_HDRINCL设置了套接字选项,你也可以在原始套接字上使用,但同样不是优选的,因为它不支持相同的错误代码send.