Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Использование recv с флагом MSG_PEEK

Ответить
Настройки темы
Использование recv с флагом MSG_PEEK

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85


Конфигурация

Профиль | Отправить PM | Цитировать


Что-то я никак не могу разобраться вот с какой проблемой:
1. Сервер и клиент устанавливают соединение. Сервер многотридовый. Клиент однотридовый. Сокет самый обычный,
Код: Выделить весь код
socket( AF_INET, SOCK_STREAM, IPPROTO_TCP )
Единственное, что сервер делает, в отличие от клиента - метит сокет как
Код: Выделить весь код
fcntl(g_nBindSocket, F_SETFL, O_NONBLOCK);
2. Сервер посылает клиенту кучу строк. Каждая строка посылается отдельным send;
3. Клиент принимает строки. Есть "синхронизирующая" стартовая строка, есть "завершающая". Перед зачиткой в буфер клиент сначала делает recv с флагом MSG_PEEK, определяет размер буфера, выделяет память под сообщение, потом снова делает туда recv, уже без MSG_PEEK. Коряво я как-то объясняю, но на практике всё должно работать. Но работает только в 3-4% случаев. Клиент почему-то получает все строки, скопом. То в 97% случаев есть на один
Код: Выделить весь код
recv(m_fdOfSocket, msg, nRealSize, MSG_PEEK);
приходят сразу все send'ы. Стартовая последовательность приходит нормально. А вот собственно строки - кучей.

Т.е. если "быстро-быстро" делать send, сообщений будет для recv будет не много, а одно, но большое.
ПОЧЕМУ???

Добавлено:

ПС. Сервер всё отсылает правильно (на уровне моей проги).

Предположения.
Должен ли я устанавливать принудительно TCP_NODELAY?


Добавлено:

TCP_NODELAY не помогает. Первые 2 строки идут раздельно, потом опять каша... Раньше каша была после первой.

Отправлено: 18:24, 26-07-2004

 

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Ладно, я так и думал.
http://www.codeguru.com/forum/showthread.php?t=296198
Уже один раз разруливал такую ситуацию, с пайпами. Теперь и с сокетами придётся.

Отправлено: 10:00, 27-07-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Использование recv с флагом MSG_PEEK

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Использование старого БП alex_cent Прочее железо 7 20-06-2009 20:33
FreeBSD - Firewall rules ifpw out recv lcat Общий по FreeBSD 1 29-05-2008 14:41
Под Андреевским флагом lllidia Игры 0 23-01-2007 16:37
Использование REGSRV32 fanatf1 Автоматическая установка Windows 2000/XP/2003 4 12-10-2005 09:52
Использование NTFS Time Хочу все знать 4 02-06-2004 00:25




 
Переход