Теперь, собственно, вопрос: после отправки данных клиентом, и получения ответа, соединение разрывается(потом, для отправки и получения новой порции даных создается новое подключение)? Или оно постоянно держится открытым? Или возможны различные варианты, в зависимости от протокола и приложений? Как в этом плане работает протокол HTTP? Подключения к той же MySql?
Возможны варианты. Они регламентируются протоколом прикладного уровня. Например, стандартный HTTP посылает запрос, получает ответ и рвёт соединение. Но можно указать в HTTP-запросе "Connection: Keep-Alive" и соединение разрываться не будет (точнее, не должно). Последующие запросы пойдут по тому же соединению. MySQL по умолчанию работает с разрывами: запрос - ответ - разрыв. Но опять-таки можно устанавливать постоянные соединения и гнать по ним серии запросов.
Интересуюсь для того, что бы написать свой простой HTTP туннель
Не вижу проблемы. Приходит коннект с клиента, пробуем приконнектиться к серверу. В случае успеха гоняем данные (принял от одного сокета, передал в другой). Если словили дисконнект от одной стороны, немедленно дисконнектим другую. Если не надо анализировать протокол, такой подход самый оптимальный. Более того, он вообще не зависит от прикладного уровня - можно гонять всё, что работает по TCP/IP.