Jump to content

    
Sign in to follow this  
IvanPletnev

LWIP Netconn API netbuf

Recommended Posts

Уважаемые коллеги, доброго времени суток!

Правильно ли я понимаю, что в этой конструкции

					while (netconn_recv(newconn, &buf) == ERR_OK) {

						do {
							netbuf_data(buf, &data, &len);
							printf ("%u Bytes received, netbuf_next() = %d\r\n", len, netbuf_next(buf));

						} while (netbuf_next(buf) >= 0);

						printf ("netbuf_next() = %d\r\n", netbuf_next(buf));
						copiedBytes=netbuf_copy(buf, (uint8_t*)&train,sizeof(train));
						printf("%u bytes are copied to structure\r\n", copiedBytes);
						netbuf_delete(buf);
					}

В случае, если размер входящих данных будет больше, чем TCP_MSS (Maximum segment size), который в данном случае 536 байт, то каждый последующий сегмент данных будет перезаписывать предыдущий в в буфере buf? То есть, функция netbuf_next() всегда будет возвращать -1? На практике у меня так и происходит. Вот результат выполнения этого кода при отправке 1024 байт. 

536 Bytes received, netbuf_next() = -1
netbuf_next() = -1
536 bytes are copied to structure
488 Bytes received, netbuf_next() = -1
netbuf_next() = -1
488 bytes are copied to structure

Тогда непонятно, зачем организован этот цикл, если условие while никогда не наступит? 

А чтобы полностью скопировать пришедшие данные, мне по приёму каждого сегмента нужно двигать смещение относительно начала моей структуры, или я  в чем-то не прав?

Заранее благодарю за ответы.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this