Я попытался узнать о концепции Socket-Send (Receive) -Buffer. И я написал эти коды: Клиент:
int client = socket(AF_INET, SOCK_STREAM, 0);
int s = getsockopt(client, SOL_SOCKET, SO_SNDBUF, &sendBuffSize, &len);
int status = connect(client, (struct sockaddr*)&addr, sizeof(struct sockaddr_in));
printf("The send buff size is : %d.\n", sendBuffSize);
char buf[100000];
int n, wn;
int fd = open("./1.txt", O_RDONLY);
while ((n = read(fd, buf, sizeof(buf))) > 0) {
wn = write(client, buf, n);
printf("Write %d bytes.\n", wn);
}
Сервер: я установил подключенного клиента как Незаблокируйте и добавьте этого клиента в epoll. Как только клиент отправляет данные на сервер, я помещаю основной поток в спящий режим [десять секунд].
char buf[8192];
sleep(10);
int rn;
while ((rn = read(events[i].data.fd, buf, sizeof(buf))) > 0) {
printf("Read %d bytes.\n", rn);
}
Размер буфера отправки клиента равен 16384.и размер буфера приема сервера равен 20000 [setsockopt].
Согласно книге: клиент вызывает функцию записи, которая блокируется, если буфер отправки сокета заполнен.
Но я получаю результат [Клиент]: Результат
И сервер: Результат
Вопросы:
- Размер буфера приема + Размер буфера отправки <100000;но почему функция записи не блокирует? </li>
- Почему сервер читает 8192 + 6808 = 15000 байт вместо непрерывного чтения 8192 байт?