![]() |
Что-то я никак не могу разобраться вот с какой проблемой:
1. Сервер и клиент устанавливают соединение. Сервер многотридовый. Клиент однотридовый. Сокет самый обычный, Код:
socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ) Код:
fcntl(g_nBindSocket, F_SETFL, O_NONBLOCK); 3. Клиент принимает строки. Есть "синхронизирующая" стартовая строка, есть "завершающая". Перед зачиткой в буфер клиент сначала делает recv с флагом MSG_PEEK, определяет размер буфера, выделяет память под сообщение, потом снова делает туда recv, уже без MSG_PEEK. Коряво я как-то объясняю, но на практике всё должно работать. Но работает только в 3-4% случаев. Клиент почему-то получает все строки, скопом. То в 97% случаев есть на один Код:
recv(m_fdOfSocket, msg, nRealSize, MSG_PEEK); Т.е. если "быстро-быстро" делать send, сообщений будет для recv будет не много, а одно, но большое. ПОЧЕМУ??? Добавлено: ПС. Сервер всё отсылает правильно (на уровне моей проги). Предположения. Должен ли я устанавливать принудительно TCP_NODELAY? Добавлено: TCP_NODELAY не помогает. Первые 2 строки идут раздельно, потом опять каша... Раньше каша была после первой. |
Ладно, я так и думал.
http://www.codeguru.com/forum/showthread.php?t=296198 Уже один раз разруливал такую ситуацию, с пайпами. Теперь и с сокетами придётся. :splat: |
Время: 17:46. |
Время: 17:46.
© OSzone.net 2001-