Unix Stream Socket recv () Возврат меньше данных в буфереLinux

Anonymous
Unix Stream Socket recv () Возврат меньше данных в буфере

Сообщение Anonymous »

Я создаю сокет потока Unix для IPC < /p>

Код: Выделить всё

fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0)
отправитель Отправить 97 байт один раз и без ограничения скорости.

Код: Выделить всё

while (1) {
ret = send(fd, buf, 97, MSG_NOSIGNAL);
}
приемник recv 128k один раз, но спит 1 секунду для каждого получения.

Код: Выделить всё

while (1) {
sleep(1);

ioctl(fd, SIOCINQ, &v);
printf("not read %d bytes\n", v);

ret = recv(cli, buf, 128 * 1024, 0);
printf("rx %d bytes\n", ret);
}
< /code>
отправитель и приемник находятся на одном хосте. Странно происходит.
recv return 22k 
только один раз, намного меньше, чем размер буфера RX по умолчанию 212K

Код: Выделить всё

recv buffer size 212992
send buffer size 212992
not read 212992 bytes
rx 34532 bytes
not read 212992 bytes
rx 26966 bytes
может кто -нибудь объяснить это, не задокументировано ни в одном руководстве Linux.

Подробнее здесь: https://stackoverflow.com/questions/796 ... -in-buffer

Вернуться в «Linux»