Неоднократно сталкиваясь с сетями, где есть только http через прокси, задумал сделать ppp over http.
До http пока не дошел, а использую обычный tcp сокет.
Как работает программа:
при запуске определяется, будет это сервер или клиент, затем создается pipe, затем форкается. первый процесс слушает сокет и pipe и передает данные из сокета в пайп и наоборот, а второй форкается еще раз. после чего второй ждет завершения третьего и по завершении пишет код возврата. третий же переключает pipe на стандартный ввод вывод и загружает pppd, который как раз и пишет/читает стандартный ввод-вывод.
вот код программы:
Клиентский 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 на обоих. Теперь не рвется. Но и передать ничего не выходит.