exosip2-5.1.0 TCP傳輸方式使用摘錄

1、使用TCP發送消息端口隨機問題

  問題:使用exosip2 主動發送TCP消息時端口不固定;
代碼分析:
  首先exoisp2中TCP方式發送數據的sock有兩種來源(eXtl_tcp.c):

《1》、tcp_tl_read_message函數中accept函數返回的socket,最多200個;

在這裏插入圖片描述
這個是作爲服務器被動連接,返回的sock綁定的端口號都是我們用eXosip_listen_addr設置的;

《2》、主動發起TCP連接時新建立的socket;

在這裏插入圖片描述

在_tcp_tlconnect_socket中創建新的socket但是有一個if判斷來決定是否進行端口綁定,判斷如下:
[外鏈圖片轉存失敗(img-sZBtuQMl-1564657065526)(en-resource://database/3076:1)]

如果沒有進行端口綁定,就會隨機選擇一個端口號,這就是問題所在

判斷條件中的ai_addr_len設置是在tcp_tl_open中設置,但是有一個宏控制住了,該宏默認是沒定義的,如下:
在這裏插入圖片描述

所以如果把該宏打開我們就能使用我們設置的端口號發送數據了,但是該 宏ENABLE_MAIN_SOCKET的作用並沒有提及,所以不知道開啓後會有什麼影響。eXtl_tls.c中說是阻止不安全的tls連接,感覺和tcp的是沒有關係的。
在這裏插入圖片描述

2、額外設置

  需要將eXtl_tcp.c中的被設置爲SO_REUSEADDR 的sock,再在此基礎上添加SO_REUSEPORT,不然發送消息的sock創建失敗。

setsockopt (sock, SOL_SOCKET, SO_REUSEPORT, (void *) &valopt, sizeof (valopt));

3、結果:

在這裏插入圖片描述

4、參考

1、SO_REUSEADDR和SO_REUSEPORT作用

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