Поведение TCP в Mac OS и Ubuntu

Поведение TCP в Mac OS и Ubuntu

Следующий процесс приводит к разному поведению в Mac OS и Ubutu:

cat some_text_file | xargs a_shell_script.sh

a_shell_script.sh

#!/bin/bash
echo "$@" | telnet 127.0.0.1 123
exit 0

TCP-сервер, прослушивающий порт 123, настроен на обработку содержимого some_text_file. В моей реализации этого процесса в Ubuntu длина ввода, который получает TCP-сервер, равна длине some_text_file. Однако в моей реализации в OSX — это меньшая часть длины, т. е. ввод каким-то образом обрезается.

Примечание: Насколько я могу судить, это не проблема xargs. Количество $#доступных args ( ) a_shell_script.shодинаково в обеих реализациях.

Спасибо!

решение1

Не зная достаточно о реализации, я могу только предположить, что ваш процесс на стороне прослушивания не зацикливается на recv(2)сокет, а только читает один раз. Тот факт, что вы получаете все сразу в Ubuntu и не получаете в OS X, вероятно, связан с реализацией стека TCP в двух системах, но это не то, что должно иметь значение; вместо этого код на стороне приема должен опрашивать сокет и считывать данные по мере их доступности.

Проверьте вызовы socket(2)и recv(2), и, возможно, опубликуйте какой-нибудь код, если считаете, что это поможет.

Связанный контент