LINUX.ORG.RU

epoll лагает

 


0

2

У меня сервер на асинхронных tcp-сокетах через epoll лагает при
коннекте и при последующих первых send() со стороны клиента.
Когда клиент пошлёт достаточно много данных, сервер начинает
принимать через recv() с нормальной скоростью. Почему так?

Я читал что-то про медленный старт TCP, но тут явно не то - так как идёт delay после первого accept в 2-5 секунд.

★★★★★

Достаточно много, это сколько?

pcap со стороны клиента и сервера можно увидеть?

nocomer
()

а сервер и клиент в одной локальной сетке?

Harald ★★★★★
()
Ответ на: комментарий от anonymous

Буфер заполняется?

я установил на стороне клиента и на стороне сервера TCP_NODELAY для этих сокетов

Сокеты точно асинхронные?

да, задано O_NONBLOCK на стороне сервера

а сервер и клиент в одной локальной сетке?

оба на машине 127.0.0.1

Достаточно много, это сколько?

больше 5 посылок send() со стороны клиента

на стороне сервера и на стороне клиента задано TCP_NODELAY

pcap со стороны клиента и сервера можно увидеть?

попробую, выложу тут

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

на стороне сервера и на стороне клиента задано TCP_NODELAY

А TCP_NODELAY разве как-то влияет на буферизацию на стороне приемника?

nocomer
()
Ответ на: комментарий от nocomer

TCP_NODELAY разве как-то влияет на буферизацию на стороне приемника?

То есть, чтобы recv() возвращал блок данных сразу же, надо уменьшить размер буфера, SO_RCVBUF?

pacify ★★★★★
() автор топика
Ответ на: комментарий от nocomer

Уменьшил размер буфера на стороне сервера до SO_RCVBUF = 512 байт (размер пакета от клиента), перестало лагать.

Спасибо.

pacify ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.