LittleBuster
@LittleBuster

Почему браузер не понимает ответы от самодельного Веб-Сервера?

Фаерфокс никак не хочет открывать страницу, не понимаю почему, уже что только не перепробовал. struct tcp_server, struct tcp_client - высокоуровневые обёртки над обычными линуксовыми сокетами.
#include "tcpserver.h" 
#include <stdio.h>
#include <stdlib.h>

#define DATA_SIZE 1024


static void new_session(struct tcp_client *client, void *data)
{
	char answ[257];
	char page[DATA_SIZE];

	memset(answ, 0x00, 257);
	strcpy(answ, "HTTP/1.1 200 OK\r\n"
         "Version: HTTP/1.1\r\n"
         "Content-Type: text/html; charset=utf-8\r\n"
         "Content-Length: 4"
         "\r\n\r\n"
         "serg");	

	tcp_client_recv(client, page, DATA_SIZE);	
	if (!tcp_client_send(client, answ, strlen(answ)))
		puts("fail sending answare.");
	else
		puts("Sended.");
	puts(page);
}

static void accept_error(void *data)
{
	puts("Accepting client fail!");
}

int main(int argc, char const *argv[])
{
	struct tcp_server server;

	tcp_server_init(&server);
	tcp_server_set_newsession_cb(&server, new_session, NULL);
	tcp_server_set_accepterr_cb(&server, accept_error, NULL);
	if (!tcp_server_bind(&server, 8080, 100)) {
		puts("Fail starting web server");
		return -1;
	}
	return 0;
}

666a397b69a441509a4e5e3e67cca13f.png
  • Вопрос задан
  • 360 просмотров
Решения вопроса 1
LittleBuster
@LittleBuster Автор вопроса
Была неправильная реализация высокоуровневой надстройки над сокетом. Он ждал принятия определённого числа байт и если приходило меньше он ждал пока прийдут остальные. Из-за этого вис tcp_client_recv и ответ браузеру не уходил.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
А лингер (SO_LINGER) на сокет вы ставите? Если не ставится лингер и вы завершаете приложение сразу после отправки данных в сокет, то данные могут не успеть уйти.

P.S.
Судя по заголовку Proxy-Authorization вы еще и какой-то прокси используете, причем этот прокси ведет себя странно, т.к. этот заголовок наружу уходить не должен. Если не секрет, какой софт себя так ведет?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы