Всем привет.
Предыстория.
Мне понадобилось написать тесты к одному приложению.
Приложение - крешрепортер. Хватает с диска дамп и отправляет по заданному урлу.
Внутри крешрепортера, как я понимаю, стандартный
crashpad.
Тест я написал с использованием стандартного класса из chromium EmbeddedTestServer (
ссылка)
По сути, весь тест - это вызов метода EmbeddedTestServer::InitializeAndListen + код, который отдаёт html (там внутри стандартный фарш из socket+bind+listen+accept+recv+send).
Далее я открыл браузер, убедился, что сервер виден по адресу
127.0.0.1:8080
Запустил крешрепортер и.... он сервер не видит.
Ок. Я взял node js, написал на нём примитивный http сервер (
вроде этого). Запустил, и убедился, что сервер виден как из браузера, так и из крешрепортера.
И теперь меня терзает вопрос: как, блин? Ведь по сути, в обоих случаях есть некий слушающий сокет, который (после соединения) начинает отдавать html.
Но когда этот сокет завёрнут в chromium код, и работает в отдельном процессе, он "виден" только из браузера. А когда сокет живёт внутри node js он, внезапно, виден и из крешрепортера тоже.
Почему??
У меня есть только одна догадка: крешрепортер использует для работы winhttp, а обычный браузер, видимо, winsock. Но при использовании локального сервера это, наверное, не важно. Опять таки, node js замечательно работает в обоих случаях.
Какие ещё могут быть различия у этих двух "серверов"?