Question: Using the recv() function in C to read from a 'stream' socket, can the len parameter be zero?

The recv() function returns zero for 'remote connection closed' and the number of bytes actually read on normal operation, so it sounds problematic if it should read zero bytes.

P.S.  

Yes I know to deal with it separately, and not get to this situation, still I'm wondering if the function can handle it, I can't find any documentation about it.

Answer: 
I'm pretty sure it's undefined ... looking at Linux it's passed all the way down to the "driver" (ie. tcp, etc.) so it can mean something, but again I don't think that meaning is defined well. Certainly SuS doesn't say anything explicit about it.

I think you are almost certainly better off just not doing it, and using MSG\_PEEK with 1 byte or poll() depending on what you want to do.
I don't think the length parameter can be zero since even an empty string (message) needs to be terminated with '\0'.