C++ Socket recv() always returns 0

112 views Asked by At

This does work:

char blockSize[4];
int r = recv(socket, blockSize, 4, 0);

This does not work. It always returns zero, why?

size_t blockSize = 0;
int r = recv(socket, (char*)blockSize, 4, 0);

It's not a major problem, I know how to convert the char array back to a size_t. But I just want to know why it's not working.

1

There are 1 answers

0
Remy Lebeau On BEST ANSWER

In the 1st example, you are passing the address of blockSize (via array decay) to recv().

In the 2nd example, you are passing the value of blockSize to recv(), type-casted as a pointer. Since blockSize is 0, the pointer is effectively nullptr. You need to pass the address of blockSize instead. Also, size_t is not guaranteed to be 4 bytes, so use (u)int32_t instead, eg:

uint32_t blockSize = 0;
int r = recv(socket, (char*)&blockSize, 4, 0);