Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 07.08.2017
Сообщений: 9
1

Сокет принял данных больше, чем размер буфера

27.08.2017, 22:37. Показов 779. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Простой клиент посылает 100 байт. Сервер просто принимает соединение и больше ничего не делает (данные не считывает, уходит в таймаут). У серверного сокета буфер приема данных стоит 12 байт.

Что я ожидал увидеть в такой ситуации:
1. Размер окна который сервер отправляет клиенту должен быть 12 байт.
2. После прихода первых 12 байт, так как мое приложение не считывает данные (не освобождает буфер), то клиенту отправляется сегмент подтверждающий о принятие первых 12 байт, но с окном 0 байт. А дальше по протоколу, попытки клиента проверить не изменилось ли окно...

Что произошло:
1. Размер окна как предполагал.
2. По какой-то причине сервер принимает 3 раза по 12 байт, и только на третий сервер выдает окно в 0 байт.

Сокет принял данных больше, чем размер буфера


По какой причине сервер принял в 3 раза больше данных? Замечу, что если к примеру поменять буфер на 24, то произойдет тоже самое - 3 раза по 24 байта.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2017, 22:37
Ответы с готовыми решениями:

Сокет принял данных больше, чем размер буфера
Этот вопрос скорее всего относиться не к php. Но так как другого раздела я не нашел, а сервер и...

Чем больше размер буфера, тем быстрее программа обрабатывает файл?
Друзья, подскажите, на официальном сайте: =Вот тут docs.embarcadero.com= Первый вопрос: В коде:...

Размер картинки больше чем размер шапки
Всем привет!ребята,у меня размер картинки больше чем высота шапки.как мне сделать так чтобы...

UDP чат. При отправке сообщения, размер которого больше принимаемого буфера, сервер падает
Всем привет. Учу c# устал от книжек и решил написать простенький чат используя udp сокеты....

4
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
28.08.2017, 07:59 2
Neomorph, буферизация на уровне ОС клиента/ОС сервера/роутера?
0
0 / 0 / 0
Регистрация: 07.08.2017
Сообщений: 9
28.08.2017, 09:00  [ТС] 3
И клиент и сервер на windows 7 на одной машине.

Как проверить есть ли буферизация в ОС? Как отключить, если есть?
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
28.08.2017, 11:42 4
можно попробовать отключить алгоритм Нейгла.
C++
1
2
int block = 0;
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast<const char *>(&block), sizeof(block));
ну и ещё есть такие настройки как SO_SNDBUF и SO_RCVBUF, о которых вы, вероятно, знаете.
0
0 / 0 / 0
Регистрация: 07.08.2017
Сообщений: 9
28.08.2017, 13:17  [ТС] 5
GbaLog-, алгоритм тут не причем, с отправлением данных все в порядке. SO_RCVBUF , в том то и проблема, стоит 12 байт, а приняло 36 (если 24, то примет 72, 48 примет 144)
0
28.08.2017, 13:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2017, 13:17
Помогаю со студенческими работами здесь

Размер буфера для получения данных из сокета
Подскажите как изменить размер буфера для получения данных из сокета? делаю так: public string...

Размер макета, больше чем экран?
Здравствуйте, пробую писать свой первый макет адаптивную вёрстку ещё не изучала.Правильно ли я...

Размер текста больше чем 300
В общем, мне нужен похожий функционал кнопки как на видео, только размер текста должен быть во всю...

Размер структуры больше чем сумма ее элементов
Здравствуйте! Давно не писал на языке Си. Сейчас возникла необходимость. Не могу найти ответ на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru