LWIP的TCP常用API

1、tcp_arg()
該函數用於傳遞給應用程序的具體狀態,在控制塊標誌建立以後調用,即在函數tcp_new()調用之後才能調用

功能 指定應該傳遞給所有回調函數的應用程序的具體狀態
原型 void tcp_arg(struct tcp_pcb *pcb, void *arg)
參數 pcb: 當前TCP連接的控制塊
arg: 需要傳遞給回調函數的參數
返回:無

2、tcp_new()
該函數在定義一個tcp_pcb控制塊後應該首先被調用,以建立該控制塊的連接標誌

功能 建立一個新的連接標誌(pcb)
原型 struct tcp_pcb *tcp_new(void)
參數
返回 pcb: 正常建立了連接標誌,返回建立的pcb
NULL:新的pcb內存不可用時

3、tcp_bind()
該函數用戶綁定本地的IP地址和端口號,用戶可以將其綁定在一個任意的本地IP地址上,它也只能在函數tcp_new()調用之後才能調用

功能 綁定本地IP地址和端口號
原型 err_t tcp_bind (struct tcp_pcb *pcb, struct ip_addr *ipaddr, u16_t port)
參數 pcb: 準備綁定的連接,類似於BSD標準中的Sockets
ipaddr:綁定的IP地址。如果爲IP_ADDR_ANY,則將連接綁定到所有的本地IP地址上
port: 綁定的本地端口號。注意:千萬不要和其它的應用程序產生衝突
返回 ERR_OK: 正確地綁定了指定的連接
ERR_USE: 指定的端口號已經綁定了一個連接,產生了衝突

4、tcp_listen()
當一個正在請求的連接被接收時,由tcp_accept()函數指定的回調函數將會被調用。當然,在調用本函數前,必須首先調用函數tcp_bind()來綁定一個本地的IP地址和端口號

功能 使指定的連接開始進入監聽狀態
原型 struct tcp_pcb *tcp_listen (struct tcp_pcb *pcb)
參數 pcb:指定將要進入監聽狀態的連接
返回 pcb: 返回一個新的連接標誌pcb,它作爲一個參數傳遞給將要被分派的函數。這樣做的原因是處於監聽狀態的連接一般只需要較小的內存,於是函數tcp_listen()就會收回原始連接的內存,而重新分配一個較小內存塊供處於監聽狀態的連接使用。
NULL: 監聽狀態的連接的內存塊不可用時,返回NULL。如果這樣的話,作爲參數傳遞給函數tcp_listen()的pcb所佔用的內存將不能夠被分配。

5、tcp_listen_with_backlog()
該函數同tcp_listen()一樣,但是該函數將限制在監聽隊列中未處理的連接的數量,這是通過參數backlog來實現的。要使用該函數,需要在配置文件lwipopts.h中設置TCP_LISTEN_BACKLOG=1。

功能 使指定的連接開始進入監聽狀態,但將會限制監聽隊列中連接的數量
原型 struct tcp_pcb *tcp_listen_with_backlog(struct tcp_pcb *pcb, u8_t backlog)
參數 pcb: 指定將要進入監聽狀態的連接
backlog: 限制監聽隊列中連接的數量
返回 pcb: 返回一個新的連接標誌pcb,它作爲一個參數傳遞給將要被分派的函數。這樣做的原因是處於監聽狀態的連接一般只需要較小的內存,於是函數tcp_listen()就會收回原始連接的內存,而重新分配一個較小內存塊供處於監聽狀態的連接使用。
NULL: 監聽狀態的連接的內存塊不可用時,返回NULL。如果這樣的話,作爲參數傳遞 給函數tcp_listen()的pcb所佔用的內存將不能夠被分配。

6、tcp_accepted()
這個函數通常在“accept”的回調函數中被調用。它允許LwIP去執行一些內務工作,例如,將新來的連接放入到監聽隊列中,以等待處理。

功能 通知LwIP一個新來的連接已經被接收
原型 void tcp_accepted(struct tcp_pcb *pcb)
參數 pcb: 已經被接收的連接
返回

7、tcp_accept()
當處於監聽的連接與一個新來的連接連接上後, 該函數指定的回調函數將被調用。通常在tcp_listen()函數調用之後調用。

功能 指定處於監聽狀態的連接接通後將要調用的回調函數
原型 void tcp_accept(struct tcp_pcb pcb,err_t ( accept)(void *arg,struct tcp_pcb *newpcb,err_t err))
參數 pcb: 指定一個處於監聽狀態的連接
accept:指定連接接通後將要調用的回調函數
返回

8、tcp_connect()
請求參數pcb指定的連接連接到遠程主機,併發送打開連接的最初的SYN段。函數tcp_connect()調用後立即返回,它並不會等待連接一定要正確建立。如果當連接正確建立,那麼它會直接調用第四個參數指定的函數(connected參數)。相反地,如果連接不能夠被正確建立,這原因可能是遠程主機拒絕連接,也可能是遠程主機不應答,無論是什麼原因,都會調用connected函數來設置相應的參數err

功能 請求指定的連接連接到遠程主機,併發送打開連接的最初的SYN段
原型 err_t tcp_connect(struct tcp_pcb *pcb,struct ip_addr ipaddr,u16_t port,err_t ( connected)(void *arg,struct tcp_pcb *tpcb,err_t err))
參數 pcb: 指定一個連接(pcb)
ipaddr: 指定連接遠程主機的IP地址
port: 指定連接遠程主機的端口號
connected:指定連接正確建立後調用的回調函數
返回 ERR_MEM:當訪問SYN段的內存不可用時,即連接沒有成功建立
ERR_OK: 當SYN被正確地訪問時,即連接成功建立

9、tcp_write()
該函數功能是發送TCP數據,但是並不是一經調用,就立即發送數據,而是將指定的數據放入到發送隊列,由協議內核來決定發送。發送隊列中可用字節的大小可以通過函數tcp_sndbuf()來重新獲得。使用這個函數的一個比較恰當的方法是以函數tcp_sndbuf()返回的字節大小來發送數據。如果函數返回ERR_MEM,則應用程序就等待一會,直到當前發送隊列中的數據被遠程主機成功地接收,然後在嘗試發送下一個數據

功能 發送TCP數據
原型 err_t tcp_write(struct tcp_pcb *pcb,void *dataptr,u16_t len,u8_t copy)
參數 pcb: 指定所要發送的連接(pcb)
dataptr:是一個指針,它指向準備發送的數據
len: 指定要發送數據的長度
copy: 這是一個邏輯變量,它爲0或者1,它指定是否分配新的內存空間,而把要發送的數據複製進去。如果該參數爲0,則不會爲發送的數據分配新的內存空間,因而對發送數據的訪問只能通過指定的指針
返回 ERR_MEM:如果數據的長度超過了當前發送數據緩衝區的大小或者將要發送的段隊列的長度超過了文件lwipopts.h中定義的上限(即最大值),則函數tcp_write()調用失敗,返回ERR_MEM
ERR_OK:數據被正確地放入到發送隊列中,返回ERR_OK

10、tcp_sent ()
該函數用於設定遠程主機成功接收到數據後調用的回調函數,通常也在函數tcp_listen()之後調用。

功能 指定當遠程主機成功地接收到數據後,應用程序調用的回調函數
原型 void tcp_sent(struct tcp_pcb pcb,err_t ( sent)(void *arg,struct tcp_pcb *tpcb,u16_t len))
參數 pcb: 指定一個與遠程主機相連接的連接(pcb)
sent: 指定遠程主機成功地接收到數據後調用的回調函數。“len”作爲參數傳遞給回調函數,給出上一次已經被確認的發送的最大字節數。
返回

11、tcp_recv ()
該函數用於指定當有新的數據接收到時調用的回調函數,通常在函數tcp_accept()指定的回調函數中調用。

功能 指定當新的數據接收到時調用的回調函數
原型 void tcp_recv (struct tcp_pcb pcb,err_t ( recv)(void *arg,struct tcp_pcb *tpcb,struct pbuf *p,err_t err))
參數 pcb: 指定一個與遠程主機相連接的連接(pcb)
recv: 指定當新的數據接收到時調用的回調函數。該回調函數可以通過傳遞一個NULL的
pbuf結構用來指示遠程主機已經關閉連接。如果沒有錯誤發生,則回調函數返回
ERR_OK,並且必須釋放掉pbuf結構。否則,如果函數的調用中發生錯誤,那麼千萬不要釋放該結構,以便LwIP內核可以保存該結構,從而等待以後處理。
返回

12、tcp_recved ()
當應用程序接收到數據的時候該函數必須被調用,用於獲取接收到的數據的長度,即該函數應該在函數tcp_recv()指定的回調函數中調用。

功能 獲取接收到的數據的長度
原型 void tcp_recved(struct tcp_pcb *pcb, u16_t len)
參數 pcb: 指定一個與遠程主機相連接的連接(pcb)
len: 獲取接收到的數據的長度
返回

13、tcp_poll()
當使用LwIP的輪詢功能時必須調用該函數,用於指定輪詢的時間間隔及輪詢時應該調用的回調函數

功能 指定輪詢的時間間隔以及輪詢應用程序時應該調用的回調函數
原型 void tcp_poll(struct tcp_pcb pcb,err_t ( poll)(void *arg, struct tcp_pcb *tpcb),u8_t interval)
參數 pcb: 指定一個連接(pcb)
poll: 指定輪詢應用程序時應該調用的回調函數
interval:指定輪詢的時間間隔。時間間隔應該以TCP的細粒度定時器爲單位,典型的設置是每秒鐘兩次。把參數“interval”設置爲10意味着應用程序將每5秒鐘輪詢一次。
返回

14、tcp_close()

功能 關閉一個指定的TCP連接,調用該函數後,TCP代碼將會釋放(刪除)pcb結構
原型 err_t tcp_close(struct tcp_pcb *pcb)
參數 pcb: 指定一個需要關閉的連接(pcb)
返回 ERR_MEM:當需要關閉的連接沒有可用的內存時,該函數返回ERR_MEM。如果這樣 的話,應用程序將通過事先確立的回調函數或者是輪詢功能來等待及重新關閉連接
ERR_OK:連接正常關閉。

15、tcp_abort()
該函數通過向遠程主機發送一個RST(復位)段來中止連接。pcb結構將會被釋放。該函數是不會失敗的,它一定能完成中止的目的。
如果連接是因爲一個錯誤而產生了中止,則應用程序會通過回調函數靈敏地處理這個事件。通常發送錯誤而引起的連接中止都是因爲內存資源短缺引起的。設置處理錯誤的回調函數是通過函數tcp_err()來完成。

功能 中止一個指定的連接(pcb)
原型 void tcp_abort(struct tcp_pcb *pcb)
參數 pcb: 指定一個需要關閉的連接(pcb)
返回

16、tcp_err()
該函數用於指定處理錯誤的回調函數。一個可靠的優秀的應用程序一般都要處理可能出現的錯誤,如內存不可用等,這就需要調用該函數來指定一個回調函數來獲取錯誤信息

功能 指定處理錯誤的回調函數
原型 void tcp_err(struct tcp_pcb pcb,void ( err)(void *arg, err_t err))
參數 pcb: 指定需要處理的發送錯誤的連接(pcb)
err: 指定發送錯誤時調用的回調函數。因爲pcb結構可能已經被刪除了,所以在處理錯誤的回調函數中pcb參數不可能傳遞進來。
返回

原文鏈接:https://blog.csdn.net/Firefly_cjd/article/details/79826818

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章