Как я понял из приведенного текста проги, алгоритм примерно следующий:
— ждем подключения от клиента;
— подключаем клиента;
— подключаемся к указанному в запросе хосту;
— передаем запрос;
— все, что получаем от хоста передаем клиенту.
Как мне кажется дело может быть вот в чем:
Когда был передан запрос хосту, прога больше не принимает запросы поступающие от клиента, а браузеры могут посылать несколько запросов подрят (см. Keep-Alive) для закачки картинок и т.п..
В результате запрошенные не первым запросом данные, браузер не получит.
Следующий код, на мой взгляд, не совсем корректен:
gis> int nSent = sockRecv.Send(buf,nBufLen); gis> if (nSent != nBufLen) gis> break;
Ведь, если Send() возвращает != SOCKET_ERROR, то все ОК.
Лучше примерно следующее:
int send_size = 0;
while(nBufLen != send_size)
{
int n = sockRecv.Send((char *)buf + send_size, nBufLen — send_size);
if(n == SOCKET_ERROR) break;
if(n > 0) send_size += n;
}
Рекомендую, если конечно уже не используешь, пользоваться асинхр. свойствами сокетов (WSAAsyncSelect()), весьма удобно.