Ответ 1
Без fork
, socat
будет принимать одно TCP-соединение, пересылать данные двунаправленно между двумя конечными точками до тех пор, пока это соединение остается открытым, а затем выйдите. Вы можете легко это увидеть:
- Запустите
socat
в одном окне терминала - Telnet на localhost 8080 в другом окне терминала. Он подключается к экземпляру
socat
. - Telnet to localhost 8080 в третьем окне терминала. Вы получили сообщение об ошибке отказа от соединения, потому что
socat
больше не прослушивает новые подключения: он перешел на обслуживание того, что уже получил. - Введите запрос HTTP во второе окно терминала. Вы получите ответ HTTP, а затем
socat
выйдет, когда соединение будет закрыто.
Параметр fork
просто заставляет его развить новый дочерний процесс для обработки вновь принятого соединения, пока родитель возвращается к ожиданию новых подключений.
socat
использование fork()
, а не нечто более сложное, например, предпродача или объединение пулов, является причиной того, что вы не захотите внедрять высокопроизводительное промежуточное программное обеспечение с помощью socat
!