Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I am sending UDP packets from localhost to localhost and runs on packets sometimes drop. How do I stop this and why does it happen?

This is output from my program

sending agent update
Created new player
Identified
sending agent update
Physics: 2 ticks this frame
time= 200
time= 300
***Packet Dropped: 2:10 ***
***Packet Dropped: 2:11 ***
***Packet Dropped: 2:12 ***
***Packet Dropped: 2:13 ***
***Packet Dropped: 2:14 ***
***Packet Dropped: 2:15 ***
***Packet Dropped: 2:16 ***
***Packet Dropped: 2:17 ***
***Packet Dropped: 2:18 ***
***Packet Dropped: 2:19 ***
***Packet Dropped: 2:20 ***
***Packet Dropped: 2:21 ***
time= 400
Physics: 2 ticks this frame
time= 500
Physics: 2 ticks this frame

Sending packets from local host to local host, packets are dropping. This only happens near the beginning. The first 10 or so packets get through, then packets after that drop. 5 to 40 packets in a row. Then packets stop dropping.

Is there any reason that this should happen?

Update:

The following code fixed the problem.

int buffsize = 65536; // 65536
setsockopt(socket, SOL_SOCKET, SO_RCVBUF, (void*)&buffsize, sizeof(buffsize));

I was sending packets too fast and exceeded the windows default receive buffer, which is only 8 KB. Increasing the buffer size fixed the problem.

like image 281
HaltingState Avatar asked Dec 16 '11 03:12

HaltingState


2 Answers

Check the UDP buffer size configured by default in your OS.

If you find it less, you can explicitly provide a greater value while creating a UDP socket.

int buffer_size = 4 * 1024 * 1024 ;
setsockopt(socket, SOL_SOCKET, SO_RCVBUF, &buffer_size, sizeof(buffer_size));

You may find THIS link pretty useful.

like image 160
Arunmu Avatar answered Sep 19 '22 17:09

Arunmu


You're probably sending packets too quickly and thus overflowing buffers. You need to implement transmit pacing to make sure the transmitter does not overwhelm the receiver. You will never 100% avoid this -- it's the nature of UDP that it does not provide a delivery guarantee.

like image 28
David Schwartz Avatar answered Sep 17 '22 17:09

David Schwartz