Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

With C TCP sockets, can 'send' return zero?

Is it ever possible for the C send function to return zero when using TCP sockets? The man page just says that it will return the number of bytes sent, but I am not sure if it will just return -1 when it can't send any data.

like image 467
Adrian Avatar asked Jun 21 '10 03:06

Adrian


People also ask

Can socket send return 0?

In both cases zero cannot be returned unless the count supplied was zero.

Can sockets send and receive both?

You can send and recv from any connected socket. The direction of the data flow does not have anything to do with the client/server relationship. It is very common for clients and servers to both send and receive.


1 Answers

I'm pretty certain, though the memory is deep in the mists of time, that I've seen it return zero before, in the situation of massive data transfers where the other end was not keeping up.

From memory, in that case, the remote TCP stack buffers had filled up, the stack had notified the local end that it was to delay until some space was cleared out and the local buffers had filled up as well.

At that point, it's not technically an error (hence no -1 returned) but no data could be accepted by the local stack.

I'm not entirely certain that's the case now since the current Posix standard seems to indicate it will simply block in that case (or fail if it's set up for non-blocking).

However, I suspect it's a moot point. You do have the possibility that it will return less than the bytes you requested to send and you therefore should have code in place to handle that.

And, since it will be pretty much the same logic handling 'one less than what you requested' as handling 'zero bytes', you may as well assume it can return zero.

like image 181
paxdiablo Avatar answered Sep 21 '22 12:09

paxdiablo