写入套接字时使用write()而不是send()的性能影响

rmr*_*ins 13 c++ sockets network-programming

我正在使用典型的套接字API在Linux平台上用C++编写网络应用程序,我正在研究将字节数组写入TCP流的两种替代方法:通过调用write()或调用send( ).我知道,因为这是Linux,套接字句柄只是一个文件描述符,因此在套接字上执行read()和write()调用是有效的,但套接字API也提供了send()和recv( )执行相同任务的功能.

因此,我想知道是否有任何特殊原因选择一类功能而不是另一类功能 - 是针对网络写入/读取优化的发送/接收功能,它们是否表现更好等等?或者我使用哪些功能真的是武断的?read()和write()在所有情况下都能正常运行吗?

感谢您的任何见解!

Nat*_*man 20

应该没有区别.引用自man 2 send:

send()和之间的唯一区别write()是标志的存在.使用零标志参数,send()相当于write().

只要你不想指定和标志,send()你就可以write()自由使用.


Chr*_*ung 6

recvsend允许您指定标志,例如带外数据包.如果您不需要指定标志,read并且write完全足够.