Сколько данных можно прочитать, когда опрос вернет POLLIN - PullRequest
0 голосов
/ 09 марта 2020

Если существует случай связи tcp клиент / сервер:

Клиент отправляет 1 МБ сообщение на сервер. На стороне сервера мы используем функции poll () и recv () для чтения сообщения из сокета , последовательность может выглядеть как Poll -> POLLIN -> recv -> Poll -> POLLIN - recv ............ Poll -> POLLIN - recv

Мой вопрос: Если опрос Функция () сообщает мне, что состояние сокета - POLLIN. Когда я читаю из сокета FD, размер данных, считываемых из сокета, возвращается через recv api как "ssize_t". Сколько стоит "ssize_t", есть ли какое-то правило или настройка, которой мы можем управлять. Поскольку мы не хотим читать только 1 байт со временем 1024 * 1024 для данных 1 МБ, поскольку это снижает производительность системы

1 Ответ

1 голос
/ 09 марта 2020

POLLIN только сигнализирует о том, что некоторые данные доступны для чтения. Он не предоставляет никакой информации, сколько данных доступно. Но вы можете просто прочитать столько данных, сколько вам нужно, поскольку recv не будет ждать, пока все данные, которые вам могут понадобиться, будут доступны, а просто вернется с тем, что можно прочитать до сих пор.

...