I am working on writing a network application in C++ on the Linux platform using the typical sockets API, and I am looking at 2 alternative ways of writing a byte array to a
recv
and send
allow you to specify flags, such as for out-of-band packets. If you don't need to specify the flags, read
and write
are perfectly adequate.
There should be no difference. Quoting from man 2 send
:
The only difference between
send()
andwrite()
is the presence of flags. With zero flags parameter,send()
is equivalent towrite()
.
So long as you don't want to specify and flags for send()
you can use write()
freely.
write
v.s. send
for a single byte, or a single array probably won't be much different - they will soon end up the same code path (ultimately they perform the same operation). The overhead in network transmission is highly unlikely to be at that level; it will the actual TCP connection and moving the bits over wires.
However, if you are intending to send large, multipart messages in a single go you should look at the sendmsg() syscall - this allows you to specify a list of non-contiguous arrays of data to send.
At the end of the day the normal guidelines apply - write the application first, then benchmark to see where your bottlenecks are.