LwIP - raw/callback API、協議棧API(sequential API)、BSD API(或者說 SOCKET API)


1、使用raw/callback API編程,用戶編程的方法是向內核注冊各種自定義的回調函數,回調函數是與內核實現交換的唯一方式。

recv_udp, accept_function, sent_tcp, recv_tcp, do_connected, poll_tcp, err_tcp!

 

2、協議棧API(sequential API)是基於raw/callback API實現的,它與內核交換的方式也只能通過回調。

netconn_new, netconn_delete, netconn_getaddr, netconn_connect, netconn_disconnect, netconn_listen, netconn_accept,

netconn_recv, netconn_send, netconn_write, netconn_close

注: netconn_send 是給UDP使用的。

netconn_write是給TCP使用的。但是tcp發送時,有三種選擇:

(1)NETCONN_COPY 標志告訴協議棧將待發送數據拷貝到內核進程所屬的內存空間,在這種情況下,會消耗系統的部分時間和內存資源,但是用戶進程

可以在向內核提交數據后立即重新使用這些數據區域,甚至刪除這些區域,而不必等待內核是否完全正確發送。如果用戶沒有設置該位,則內核構造發送

數據包是,會引用這些發送數據的內存區域,在這種情況下,用戶進程不能再對這些數據進行修改,這種方式通常用在靜態數據(ROM數據)的發送中。

對於非ROM數據的發送,用戶應盡量設置NETCONN_COPY標志。

(2)NETCONN_MORE標志,當其置位時,組裝這些數據的最后一個TCP報文段首部PSH標志將被設置,這樣,數據在接收端將被盡快的遞交給上層,而不會緩沖等待。

 

3、BSD API(或者說 SOCKET API),是Lwip設計者對sequential API函數進行了簡單封裝后的函數。

socket、bind、connect、listen、accept、sendto、write、recvfrom、read、close。

sendto、recvfrom:主要用於UDP,但是也可用於TCP。

write、read:主要用於TCP,但是也可用於UDP。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM