Re: Сокеты: Прокси
От: DS Украина  
Дата: 14.08.02 06:51
Оценка:
Здравствуйте gis.

Как я понял из приведенного текста проги, алгоритм примерно следующий:
— ждем подключения от клиента;
— подключаем клиента;
— подключаемся к указанному в запросе хосту;
— передаем запрос;
— все, что получаем от хоста передаем клиенту.

Как мне кажется дело может быть вот в чем:
Когда был передан запрос хосту, прога больше не принимает запросы поступающие от клиента, а браузеры могут посылать несколько запросов подрят (см. 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()), весьма удобно.

Удачи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.