bind端口復(fù)用(可重復(fù)綁定同ip同端口)
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
所謂綁定是指別人連接我只能通過我所綁定的端口,其實(shí)是說,你現(xiàn)在有這個端口開放了,人家可以連接到你的服務(wù),也可以進(jìn)行數(shù)據(jù)傳輸,但是也不一定要使用此端口進(jìn)行傳輸,可能此端口只用于控制信息的傳輸 端口 = 端口 + Ip TCP 三元組 UDP 2元組 默認(rèn)情況下,一個線程的棧要預(yù)留1M的內(nèi)存空間,而一個進(jìn)程中可用的內(nèi)存空間只有2G,所以理論上一個進(jìn)程中最多可以開2048個線程,但是內(nèi)存當(dāng)然不可能完全拿來作線程的棧,所以實(shí)際數(shù)目要比這個值要小。
端口復(fù)用最常用的用途應(yīng)該是防止服務(wù)器重啟時之前綁定的端口還未釋放。這種情況下如果設(shè)定了端口復(fù)用,則新啟動的服務(wù)器進(jìn)程可以直接綁定端口,直接接過前輩的槍。如果沒有設(shè)定端口復(fù)用,綁定會失敗,提示ADDR已經(jīng)在使用中——那只好等等再重試了,麻煩!
1、當(dāng)有一個有相同本地地址和端口的socket1處于TIME_WAIT狀態(tài)時,而你啟動的程序的socket2要占用該地址和端口,你的程序 就要用到該選項。 (這就是我說的情況啦) 2、SO_REUSEADDR允許同一port上啟動同一服務(wù)器的多個實(shí)例(多個進(jìn)程)。但每個實(shí)例綁定的 IP地址是不能相同的。在有多塊網(wǎng)卡或用IP 3、SO_REUSEADDR允許單個 進(jìn)程綁定相同的端口到多個socket上,但每個socket綁定的ip地址不同。這和2很相似,區(qū)別請看UNPv1。 4、SO_REUSEADDR允許完全相同的地址和端口的重復(fù)綁定。但這只用于UDP的多播,不用于TCP。 bind的意義是將已經(jīng)建立的“空白的”socket綁定在網(wǎng)絡(luò)上讓大家在需要時能夠找得到。如果不是把socket綁定在自己的機(jī)器上,而是另外一臺機(jī)器,無法想象在實(shí)際中將如何運(yùn)作。我們先假設(shè)系統(tǒng)允許這么做,那么當(dāng)網(wǎng)絡(luò)上的其他用戶請求你的服務(wù)時,他們找到的是另外那臺機(jī)器,但是那臺機(jī)器還是要設(shè)法連到你的本機(jī)上才能讓你的socket接受請求并提供服務(wù),但這豈不是多此一舉?另外,使用bind并不需要去設(shè)定本機(jī)IP,只要將地址字段清零,系統(tǒng)就自動實(shí)現(xiàn)本機(jī)IP的綁定了。 該文章在 2018/2/9 1:10:40 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |