Повторное использование клиентского TCP-соединения для HTTP - PullRequest
2 голосов
/ 23 апреля 2011

Почему я не могу повторно использовать сокет http-клиента в веб-клиенте C, поскольку я не звоню close(http_socket_fd)?Первая запись / чтение в дескриптор файла сокета работает отлично.Любое / все последовательные чтения возвращают ноль (вряд ли какая-либо ошибка).

По сути, я не хочу продолжать воссоздавать новые сокеты клиентских подключений на том же хосте для последовательных запросов.Разве в C невозможно повторно использовать открытый клиентский сокет (для которого уже включена поддержка HTTP-активности) для последовательных операций чтения / записи?Кажется возможным с Java http://www.mail-archive.com/httpclient-dev@jakarta.apache.org/msg04687.html

Example: (PSEUDO_CODE)
MANY_DOMAINS=30,000;
//initial connection
do{
  http_socket_to_domain_x=open(NEW_TCP_SOCKET_PER_DOMAIN);
  get(initial_url_path);
  read(http_socket_to_domain_x,initial_http_response);
} while(EACH_DOMAIN)
for(LIST_OF_URLS FROM EACH_DOMAIN);
  //successive connections - NO RECREATING TCP SOCKET!
do{
  get(another_url_path);
  read(http_socket_to_domain_x,another_http_response);
} while(EACH_URL_PER_DOMAIN)
//finally
close(http_socket_to_domain_x);

Ответы [ 2 ]

1 голос
/ 23 апреля 2011

Вы хотите прочитать о постоянных соединениях HTTP / 1.1 .

0 голосов
/ 23 апреля 2011

Сервер может закрывать соединение.Вы отправляете заголовки HTTP / 1.1?Подробнее см. http://www.io.com/~maus/HttpKeepAlive.html.

...