История изменений
Исправление www_linux_org_ru, (текущая версия) :
Эта единственная проснувшаяся нить быстро вычитает 8 байт, отошлет клиенту 10KiB мусора в ответ (без какого-либо контроля за тем, сколько реально ушло), закроет клиентский сокет и уснет на 10 секунд.
насчет мусора — мне кажется *не зря* царь отсылает мусор; я мельком глянул предыдущую дискуссию — мне показалось, что царь держался мнения, что ос должна сбуферизовать выхлоп в сокет, так что тред может сокет безопасно закрыть
я именно этот случай не пробовал, но емнип пробовал заставить линукс держать не очень большие входные буфера (емнип 2Кб или 10Кб) на 1К или больше аксептнутых сокетов, так там линукс просто портил эти входные буфера, вот так!
мне кажется стоит пропатчить царский код, чтобы он выдавал не мусор, и посмотреть, что случиться, когда линуксу придется держать 100К исходящих буферов пусть даже по 10Кбайт (царский сервер должен быть рассчитан на такой сценарий)
царский сервер так же должен принимать во внимание случай, когда объем исходящих буферов, которые должна держать ос, превысит размер оперативки (если tcp со стороны клиента не показывает подтверждения приема из-за случайной или злонамеренной непроходимости сети) — я не вижу ничего в коде, что как-то это обрабатывает, но тут я могу и непонимать что-то
также интересно посмотреть почти симметричный случай — много небольших входящих буферов
Исправление www_linux_org_ru, :
Эта единственная проснувшаяся нить быстро вычитает 8 байт, отошлет клиенту 10KiB мусора в ответ (без какого-либо контроля за тем, сколько реально ушло), закроет клиентский сокет и уснет на 10 секунд.
насчет мусора — мне кажется *не зря* царь отсылает мусор; я мельком глянул предыдущую дискуссию — мне показалось, что царь держался мнения, что ос должна сбуферизовать выхлоп в сокет, так что тред может сокет безопасно закрыть
я именно этот случай не пробовал, но емнип пробовал заставить линукс держать не очень большие входные буфера (емнип 2Кб или 10Кб) на 1К или больше аксептнутых сокетов, так там линукс просто портил эти входные буфера, вот так!
мне кажется стоит пропатчить царский код, чтобы он выдавал не мусор, и посмотреть, что случиться, когда линуксу придется держать 100К исходящих буферов пусть даже по 10Кбайт (царский сервер должен быть рассчитан на такой сценарий)
царский сервер так же должен принимать во внимание случай, когда объем исходящий буферов, которые должна держать ос, превысит размер оперативки (если tcp со стороны клиента не показывает подтверждения приема из-за случайной или злонамеренной непроходимости сети) — я не вижу ничего в коде, что как-то это обрабатывает, но тут я могу и непонимать что-то
также интересно посмотреть почти симметричный случай — много небольших входящих буферов
Исходная версия www_linux_org_ru, :
Эта единственная проснувшаяся нить быстро вычитает 8 байт, отошлет клиенту 10KiB мусора в ответ (без какого-либо контроля за тем, сколько реально ушло), закроет клиентский сокет и уснет на 10 секунд.
насчет мусора — мне кажется *не зря* царь отсылает мусор; я мельком глянул предыдущую дискуссию — мне показалось, что царь держался мнения, что ос должна сбуферизовать выхлоп в сокет, так что тред может сокет безопасно закрыть
я именно этот случай не пробовал, но емнип пробовал заставить линукс держать не очень большие входные буфера (емнип 2Кб или 10Кб) на 1К или больше аксептнутых сокетов, так там линукс просто портил эти входные буфера, вот так!
мне кажется стоит пропатчить царский код, чтобы он выдавал не мусор, и посмотреть, что случиться, когда линуксу придется держать 100К исходящих буферов пусть даже по 10Кбайт (царский сервер должен быть рассчитан на такой сценарий)
царский сервер так же должен принимать во внимание случай, когда объем исходящий буферов, которые должна держать ос, превысит размер оперативки — я не вижу ничего в коде, что как-то это обрабатывает, но тут я могу и непонимать что-то
также интересно посмотреть почти симметричный случай — много небольших входящих буферов