Есть небольшой вебсервер на фрипаскале под линукс. Основан он на TFPCustomHttpServer. Все соединения работают в режиме Connection: close.
Локально работает нормально, но вот через проброшенный по ssh туннель - очень криво. Часть соединений обрезается (в консоли браузера получается ошибка ERR_CONTENT_LENGTH_MISMATCH).
Нашел в интернете, что может помочь изменения параметров службы tcpip: TcpMaxConnectRetransmissions и TcpMaxDataRetransmissions, но не помогло.
Потом я обнаружил, что сервер в своей реализации закрывает сокет сразу после отправки, поэтому я добавил следующий код:
fpshutdown(Socket.Handle, 2);
X := 50;
while (Socket.Read(Dummy, 4) > 0) and (X > 0) do
begin
Sleep(100);
Dec(X);
end;
Стало немного лучше, но все-равно плохо.
Что еще можно посмотреть? В чем может быть причина?
Как правильно завершать соединение?