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;
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user