Handle fragmented data transmission

* Resolve #25
This commit is contained in:
northkillz
2019-10-17 16:06:10 +09:00
parent 00b812249f
commit 0525c3776e

View File

@ -431,19 +431,18 @@ rc_packet *net_recv_packet(int sd)
packet.size = psize;
ret = recv(sd, (char *) &packet + sizeof(int), psize, 0);
if (ret == 0)
int received = 0;
while (received < psize)
{
fprintf(stderr, "Connection lost.\n");
connection_alive = 0;
return NULL;
}
ret = recv(sd, (char *) &packet + sizeof(int) + received, psize - received, 0);
if (ret == 0) /* connection closed before completing receving */
{
fprintf(stderr, "Connection lost.\n");
connection_alive = 0;
return NULL;
}
if(ret != psize)
{
fprintf(stderr, "Warning: recv() return value (%d) does not match expected packet size (%d).\n", ret, psize);
net_clean_incoming(sd, DATA_BUFFSIZE); /* Should be enough. Needs some checking */
return NULL;
received += ret;
}
return &packet;