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

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Pawel2420
Piegowaty Guziec
Piegowaty Guziec
Posty: 14
Rejestracja: 07 sty 2011, 16:14
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64

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

Post 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 ?
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 17 gości