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