Я написал простые серверные и клиентские приложения, в которых я могу переключаться между протоколами TCP, DCCP и UDP. Цель состояла в том, чтобы передать файл из одного в другой и измерить трафик для каждого протокола, чтобы я мог сравнить их для разных настроек сети (я примерно знаю, какой должен быть результат, но мне нужны точные цифры/графики). В любом случае, после запуска обоих приложений на разных компьютерах и запуска tcpdump я получаю в журнале tcpdump только первые несколько МБ (~ 50 МБ) из моего файла размером 4 ГБ. Приложения написаны на стандартном коде C/C++, который можно найти где угодно в Интернете. В чем может быть проблема или что я могу делать неправильно здесь?
-- Изменить
Командная строка, которую я использую:
tcpdump -s 1500 -w mylog
tcpdump захватывает, а затем отправляет пакеты только первые ~55 секунд. Это время, необходимое клиенту для отправки файла в сокет. После этого он останавливается, хотя сервер продолжает получать и записывать файл на жесткий диск.
-- Редактировать2
Исходный код:
client.cpp
server.cpp
common.hpp
common.cpp
-- Редактировать финал
Как многие из вас указывали (и как я подозревал), в исходном коде было несколько неправильных представлений/ошибок. После того, как я его почистил (или почти переписал), с tcpdump работает как надо. Я приму ответ от @Laurent Parenteau, но только для пункта 5, поскольку он был единственным, имеющим отношение к проблеме. Если кого-то интересует правильный код, вот он:
Исходный код изменен
-s snaplen
? - person nos   schedule 27.07.2010