I'm having an issue with Socket in C.
Packet size is set to 3072
in sock option like this :
int recvBuff = 3072;
int recvLowAt = 2;
if (setsockopt(sock, SOL_SOCKET, SO_RCVLOWAT, &recvLowAt, sizeof(recvLowAt)) < 0) {
LOGE("Error setsockopt rcvlowat -> %s\n", strerror(errno));
close(sock);
return -1;
}
if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &recvBuff, sizeof(recvBuff)) < 0) {
LOGE("Error setsockopt rcvbuf -> %s\n", strerror(errno));
close(sock);
return -1;
}
Sometime packet is < 3072
and I would like to get it even if it's less than 3072
if ((size = recv(sock, buffer, BUFF_SIZE, 0)) < 0) {
LOGE("Error recv -> %s\n", strerror(errno));
size = 0;
} else {
LOGI("%d bytes received\n", size);
}
Output is :
1448 bytes received
2896 bytes received
1448 bytes received
And I would like an output like this :
Output is :
3072 bytes received
3072 bytes received
3072 bytes received
500 bytes received
Whole data has been sended !
I tried to use MSG_WAITALL
as a flag in recv
but last packet is not sended...
Can I have some help? Thanks!