|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Использование recv с флагом MSG_PEEK |
|
Использование recv с флагом MSG_PEEK
|
Старый параноик Сообщения: 2423 |
Профиль | Отправить PM | Цитировать Что-то я никак не могу разобраться вот с какой проблемой:
1. Сервер и клиент устанавливают соединение. Сервер многотридовый. Клиент однотридовый. Сокет самый обычный, Единственное, что сервер делает, в отличие от клиента - метит сокет как 2. Сервер посылает клиенту кучу строк. Каждая строка посылается отдельным send; 3. Клиент принимает строки. Есть "синхронизирующая" стартовая строка, есть "завершающая". Перед зачиткой в буфер клиент сначала делает recv с флагом MSG_PEEK, определяет размер буфера, выделяет память под сообщение, потом снова делает туда recv, уже без MSG_PEEK. Коряво я как-то объясняю, но на практике всё должно работать. Но работает только в 3-4% случаев. Клиент почему-то получает все строки, скопом. То в 97% случаев есть на один приходят сразу все send'ы. Стартовая последовательность приходит нормально. А вот собственно строки - кучей. Т.е. если "быстро-быстро" делать send, сообщений будет для recv будет не много, а одно, но большое. ПОЧЕМУ??? Добавлено: ПС. Сервер всё отсылает правильно (на уровне моей проги). Предположения. Должен ли я устанавливать принудительно TCP_NODELAY? Добавлено: TCP_NODELAY не помогает. Первые 2 строки идут раздельно, потом опять каша... Раньше каша была после первой. |
|
Отправлено: 18:24, 26-07-2004 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Ладно, я так и думал.
http://www.codeguru.com/forum/showthread.php?t=296198 Уже один раз разруливал такую ситуацию, с пайпами. Теперь и с сокетами придётся. |
Отправлено: 10:00, 27-07-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Использование старого БП | 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 |
|