mirror of
https://github.com/Tiiffi/mcrcon.git
synced 2025-10-27 11:21:07 -04:00
Merge pull request #31 from northkillz/develop
Handle fragmented data transmission
This commit is contained in:
21
mcrcon.c
21
mcrcon.c
@ -431,19 +431,18 @@ rc_packet *net_recv_packet(int sd)
|
|||||||
|
|
||||||
packet.size = psize;
|
packet.size = psize;
|
||||||
|
|
||||||
ret = recv(sd, (char *) &packet + sizeof(int), psize, 0);
|
int received = 0;
|
||||||
if (ret == 0)
|
while (received < psize)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Connection lost.\n");
|
ret = recv(sd, (char *) &packet + sizeof(int) + received, psize - received, 0);
|
||||||
connection_alive = 0;
|
if (ret == 0) /* connection closed before completing receving */
|
||||||
return NULL;
|
{
|
||||||
}
|
fprintf(stderr, "Connection lost.\n");
|
||||||
|
connection_alive = 0;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if(ret != psize)
|
received += ret;
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return &packet;
|
return &packet;
|
||||||
|
|||||||
Reference in New Issue
Block a user