клиент записывает 5 байтов в сокет через каждые 1 секунду. сервер непрерывно считывает данные из сокета. буфер на конце сервера составляет 10 байтов. поэтому функция выглядит так:поведение сокета при чтении
read(fd, buf, 10);
сервер читает 5 байтов каждый раз.
Клиент теперь пишет 5 байтов непрерывно. сервер тот же. сервер каждый раз считывает 10 байтов.
так что чтение в сокете возвращает столько байтов, сколько доступно в буфере. не дожидаясь, чтобы заполнить буфер.
это как-то связано с SO_RCVLOWAT. Я читал, что этот параметр сокета имеет эффект только в select/poll io.
благодаря
обновление:
я изменил SO_RCVLOWAT до 10, теперь он ждет 10 байт, по крайней мере в буфере приема. поэтому кажется, что он имеет какое-то отношение к знаку с низким уровнем воды в буфере приема.
но я не могу установить низкий водяной знак на 0. он всегда устанавливает его в 1 в этом случае. почему это так?
может быть также прочитанным с 0 также :) –