Home > Blockchain >  C Socket recv() always returns 0
C Socket recv() always returns 0

Time:10-30

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.

CodePudding user response:

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);
  • Related