1. 記exosip使用過程中遇到的問題
exosip
是在基於osip
之上再封裝的更高級API的GPL開源庫,osip
庫只提供sip協議棧狀態機管理以及細粒度的接口,不提供任何網絡方面的相關組件。exosip
則基於osip
提供了udp、tcp、tls、dtls協議的網絡組件,並封裝了更便於使用的接口。
exosip官網:http://savannah.nongnu.org/projects/exosip/
1.1. 宏 ENABLE_MAIN_SOCKET
在exosip 5.1.2版本中使用接口eXosip_listen_addr
監聽TCP端口時,系統中查詢不到指定端口被監聽的任何信息,這是因為該版本中有一個宏將TCP套接字的綁定和監聽進行條件限制了,需要在編譯時指定該預編譯宏(默認是未指定)。5.0.0版本中並無此問題。
對於UDP則給定什么端口就監聽什么端口。
使用該預編譯宏之后,指定的端口會被綁定並監聽,但是由exosip主動發起的sip消息使用的卻是一個隨機的端口號,並不是指定的端口號,包括5.0.0版本一樣會有此問題。關於這一點在exosip的源代碼有簡短的交代:
大意是exosip中的tcp消息進出使用的是兩個不同的socket。
1.2. 宏 SOCK_CLOEXEC
在exosip 5.1.2版本中加入了這個預編譯宏,暫且先不詳盡關於此宏的作用。5.0.0中沒有此宏。