2013-11-26 4 views
2

recv (sh , buff , 5000, 0). Предположим, что мой бафф mallocated для x байтов. Как я могу писать полученные байты всегда с самого начала? Я хочу сказать, что хочу начать с *buff, а не с buff+x.recv - заполнение всегда первых байтов

+3

Можете ли вы попытаться уточнить, что дальше? Что вы подразумеваете под «писать», здесь «buff + x» никогда не будет иметь смысла, это будет первый байт * после * вашего выделенного пространства, и, таким образом, вы ничего не должны касаться ... – unwind

+2

Если 'buff 'выделяется из кучи, и вы не изменили указатель с момента выделения, он укажет на начало выделенной памяти. Поэтому, когда вы вызываете' recv' с 'buff', тогда' recv' будет писать th e первый полученный байт в первый байт, на который указывает 'buff'. –

+2

Вы делаете это, показывая. Оператор 'recv' в вашем вопросе пытается прочитать 5000 байт, на которые указывает' buff'. – alk

ответ

1

recv начинает всегда записывать полученные данные по указанному адресу (* buff).

Для того, чтобы ваш код надежным вы должны прочитать в цикле, пока все данные не пришли (это означает, что последующие вызовы должны написать buff+received bytes.

Смотрите также Handling partial return from recv() TCP in C

Смежные вопросы