LINUX.ORG.RU

pppd и код возврата 9 и 16


0

1

Неоднократно сталкиваясь с сетями, где есть только http через прокси, задумал сделать ppp over http.

До http пока не дошел, а использую обычный tcp сокет.

Как работает программа:

при запуске определяется, будет это сервер или клиент, затем создается pipe, затем форкается. первый процесс слушает сокет и pipe и передает данные из сокета в пайп и наоборот, а второй форкается еще раз. после чего второй ждет завершения третьего и по завершении пишет код возврата. третий же переключает pipe на стандартный ввод вывод и загружает pppd, который как раз и пишет/читает стандартный ввод-вывод.

вот код программы:

http://pastebin.com/Nt4500s0

Клиентский pppd запускается с «nodetach», «notty», «noauth»

серверный с «nodetach», «notty», «noauth», «persist», «passive»

так вот, после непродолжительного обмена пакетами, клиентский pppd завершается с 9 кодом:

The command specified as the argument to the pty option could not be run

либо же с 16, что модем положил трубку

параметры я позаимствовал из публиковавшегося тут несколько лет назад ppp over jabber.

ЧЯДНТ?

Выяснилось, что завершения не происходит, если не передавать данные из сокета в пайп. В этом случае оба pppd периодически шлют пакеты.

UPD: разделил чтение и запись по разным потокам: http://pastebin.com/7uBkuKbL

ничего не изменилось

UPD2:

проблема решилась указанием persist на обоих. Теперь не рвется. Но и передать ничего не выходит.

★★★★★

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.