Strona 1 z 1

[C] Gubienie pakietów UDP przy wysyłaniu

: 08 maja 2011, 17:30
autor: Pawel2420
Witam !

Napisałem w C program przetwarzający dane przesyłane w pakietach UDP.
W pętli odbieram pakiety UDP przy pomocy instrukcji recvfrom. Po skompletowaniu około 64KB. Dokonuję odpowiednich operacji, dzielę dane na porcje po 1316 bajtów i je wysyłam w pakietach UDP przy użyciu instrukcji sendto. Strumień wchodzący jak i wychodzący jest na poziomie 2Mbps.
Instrukcja sendto zwraca zawsze prawidłową wartość 1316 batów. Pakiety wejściowe odbieram praktycznie wszystkie. Bardzo sporadycznie coś zginie. Problem jest z pakietami wysyłanymi. Ginie kilka procent. Sprawdzałem, że VLC uruchomiony na tym samym komputerze potrafi bez utraty danych wysyłać wielokrotnie więcej pakietów UDP niż ja potrzebuję. Program, który napisałem uruchomiłem również na płytce z procesorem o znikomo małych możliwościach w porównaniu z dużym komputerem. Wysyłane pakiety również giną ale sporadycznie. Tak więc wydajność komputera jest zdecydowanie wystarczająca.
Testowo zamiast wysyłać dane na zewnątrz zapisywałem je do pliku. Były wszystkie. Wygląda więc, że problem jest z winsockiem.
Jak w Ubuntu wygląda sprawa w buforem wyjściowym jeśli chodzi o wysyłanie pakietów UDP ? Jaką ma wielkość ? Czy instrukcja sendto zwróci błąd jeśli bufor się zapełni ?