Re: change function
"Larry" <email@example.com> ha scritto nel messaggio
this is what I have figure out so far: (untested)
int Socket::ReceiveBytes(char * buffer, int buffersize)
if(buffersize > 32768)
buffersize = 32768;
u_long arg = 0;
if (ioctlsocket(s_, FIONREAD, &arg) != 0)
if (arg == 0)
if (arg > buffersize)
arg = buffersize;
int rv = recv (s_, temp, arg, 0);
if (rv <= 0)
if (rv == 0)
if (rv > 0)
std::copy(temp, temp + rv, buffer);
Determine the amount of data which can be read atomically from socket s.
argp points to an unsigned long in which ioctlsocket stores the result. If s
is stream oriented (for example, type SOCK_STREAM), FIONREAD returns an
amount of data which can be read in a single recv; this may or may not be
the same as the total amount of data queued on the socket. If s is message
oriented (for example, type SOCK_DGRAM), FIONREAD returns the size of the
first datagram (message) queued on the socket.
So I basically I will recv according to ioctlsocket. if the latter is > then
buffersize I will read buffersize (arg = buffersize) if it's
less...well...be just happy with that...if it's 0 or less don't even bother
copying the buffer and return accordingly.
what about my idea?