unix - understanding socket recv behaviour -


i'm reading manpage recv http://linux.die.net/man/2/recv , doesn't answer questions have, hope can answers here.

i call recv way:

numbytes = ::recv(getsocketid(), pdata, nsize, msg_dontwait); 

now questions are:

  1. when package bigger buffer, recv read nsize bytes , place in memory location. returnvalue nsize, right? can call recv again until data received.
  2. when package smaller nsize rcv read many bytes available , return value < nsize && >= 0. or recv try wait until nsize bytes received? if understand man page correct, think not case (at least hope it). or recv return -1 , errno = eagain or ewouldblock?
  3. if recv returns -1 happens buffer? stay untouched in case or part of data has been put it, never know how many bytes transfered, assume not case, right?

what want have is, reads many bytes available, , return, giving me number of bytes transfered. in additional layer construct actual message, independent of how fragemented received. however, don't want server stuck on receive call because can't know client doing , shouldn't hang server on 1 connection.

  1. when package bigger buffer, recv read nsize bytes , place in memory location. returnvalue nsize, right? can call recv again until data received.

correct.

  1. when package smaller nsize rcv read many bytes available , return value < nsize && >= 0.

not quite. return > 0 if there data, 0 if peer has closed connection, , -1 if there has been error, or if there no data , in non-blocking mode.

or recv try wait until nsize bytes received?

no.

if understand man page correct, think not case (at least hope it).

correct.

or recv return -1 , errno = eagain or ewouldblock?

yes, if in non-blocking mode , there no data.

  1. if recv returns -1 happens buffer?

nothing.

will stay untouched in case

yes.

or part of data has been put it

no. if got data length, not -1.

but never know how many bytes transfered, assume not case, right?

right.


Comments

Popular posts from this blog

linux - Does gcc have any options to add version info in ELF binary file? -

android - send complex objects as post php java -

charts - What graph/dashboard product is facebook using in Dashboard: PUE & WUE -