Как обойти сокет? - PullRequest
       19

Как обойти сокет?

1 голос
/ 22 января 2011

Я установил потоковый сервер "Lighttpd" (light-tpd), который работает на порту 81.

У меня есть программа на C, которая прослушивает http-запросы на порту 80, используя сокет сервера , созданный сокетом api.

Я хочу, чтобы как только я получил запрос на порт 80 от клиента, я перенаправил его на сервер потоковой передачи, и оставшийся разговор произошел между сервером потоковой передачи и клиентом, и они полностью обошли мою C-программу. 1007 *

Проблема в том, что клиент будет ожидать сообщения от сокета на порту 80 (то есть от сокета моей программы на C), поскольку он отправил запрос только на порт 80, а не с сервера потоковой передачи, который предоставляет службу через порт 81. Может ли кто-нибудь помочь мне в этом вопросе обхода сокета на порту 80 для ответа клиенту.

Решение Я думаю: моя программа может быть посредником ... Она будет перенаправлять запрос на порт 81 потокового сервера, и когда она получает оттуда ответы, она направляет их клиенту ... но обход будет эффективным и Я не знаю, как это сделать. Пожалуйста, помогите мне.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 22 января 2011

Зачем ставить вашу C-программу впереди? Lighttpd предназначен для использования в качестве внешнего прокси-сервера (среди прочего), поэтому вы можете поместить lighttpd вперед и использовать его mod_proxy_core для передачи запросов в вашу C-программу. Вы можете использовать X-Rewrite и / или X-Sendfile для передачи запросов обратно в Lighttpd после некоторой обработки внутри вашего приложения.

0 голосов
/ 22 января 2011

Недавно я внедрил похожую технику, когда одна программа принимает соединение TCP, а затем «передает» это соединение другому компоненту и больше не играет никакой роли в диалоге сокетов.Он использует технику передачи файлового дескриптора принятого сокета через сокет UNIX к серверному компоненту, который эффективно выполняет межпроцессный процесс dup() из fd.

См. здесь и здесь .

Это работает для меня, так как у меня есть контроль над обоими концами сокета UNIX на стороне сервера, но для работы вам понадобится:

  1. Гнездо UNIX между компонентом отправки и компонентами сервера.
  2. Полный контроль над компонентом сервера.

Возможно, вам придется взломать источник lighttpdкод ...

Извините, не совсем правильный ответ ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...