вопрос такой,.. пишу сервер на блокирующих сокетах, для каждого соединения форкаю отдельный процесс при accept'е,.. потом читаю данные recv()... но дело в том что recv() возвращает что она прочитала только 255 байт из сокета, когда я точно знаю что послано было 765 байт...
в чем может быть причина?
а если как-нить так попробывать?while (recv(.., buffer) != 0){
megabuffer += buffer
}
parse(megabuffer)
Причина в том (и это описано в мане), что читается столько байт, сколько доступно (принято) на данный момент, вплоть до (но возможно меньше) того количества, которое запрошено. Решается использованием флага MSG_WAITALL (см. примечание к нему) и/или написанием собственной функции-обёртки, которая будет читать, пока не прочитает сколько нужно или соединение не будет разорвано.В любом случае, чтение манов является хорошей и общепринятой практикой, особенно при использовании вызовов, работу которых Вы не до конца понимаете.
спасибо! MSG_WAITALL помог... правда где-то в половине случаев соединение рвется по таймауту, но зато приходят все данные :)