Я не могу понять, как и почему работают следующие сегменты кода:
/* Now lets try to set the send buffer size to 5000 bytes */
size = 5000;
err = setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, &size, sizeof(int));
if (err != 0) {
printf("Unable to set send buffer size, continuing with default size\n");
}
Если мы проверяем значение буфера отправки, оно действительно правильно установлено на 5000 * 2 = 10000.Однако, если мы пытаемся отправить больше, чем размер буфера отправки, он отправляет все это.Например:
n = send(sockfd, buf, 30000, 0);
/* Lets check how much us actually sent */
printf("No. of bytes sent is %d\n", n);
Это печатает 30000.
Как именно это работает?Разве тот факт, что размер буфера отправки был ограничен 10000, не имел никакого эффекта?Если это так, что именно произошло?Какая-то фрагментация?
ОБНОВЛЕНИЕ: Что произойдет, если сокет находится в неблокирующем режиме?Я попробовал следующее:
- Изменение размера буфера до 10000 (5000 * 2) приводит к отправке 16384 байта
- Изменение размера буфера до 20000 (10000 * 2) приводит к 30000 байтовбыть отправленным
Еще раз, почему?