>Есть Сервер и Клиент на неблокирующих сокетах >Клиент: >... >send(sock, str1, len1, 0); >send(sock, str2, len2, 0); > >Сервер: >... >Sleep(5000); >read_data = recv(sock, str, BUF_SIZE, 0); > >При одновременном запуске, Сервер получит read_data==len1+len2 (если len1+len2<=FUB_SIZE), >а нужно чтобы read_data==len1; >Вобщем, чтобы пакеты не объединялись. отключите буферизацию на клиенте. flags = fcntl(fd, F_GETFL, 0); rc = fcntl(fd, F_SETFL, flags | O_NONBLOCK); но делать так - плохо. ) протокол уровня прилижения работающий поверх TCP не должен быть завязан на размер блока, т.к. TCP - поточный протокол, а не пакетный. Имейте ввиду, может получиться так, что один send/write() на отправляющей стороне может привратится в два recv/read меньшего размера на принимающей. Это зависит от нагрузки на ядро в этот момент и размера MTU по маршруту пакета.
|