TCP协议属性设置之SO_REUSEADDR属性
生活随笔
收集整理的這篇文章主要介紹了
TCP协议属性设置之SO_REUSEADDR属性
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
此屬性用于設(shè)置某個端口是否允許重用。這個屬性的用處在那里呢?當(dāng)我們編寫程序時監(jiān)聽了一個端口,但是由于某種情況,服務(wù)器程序關(guān)閉或者一場退出。造成本地端口出現(xiàn)TIME_WAIT狀態(tài)時。這是當(dāng)我們繼續(xù)監(jiān)聽此端口時就會出現(xiàn)錯誤。這是設(shè)置這個屬性就顯得非常重要。當(dāng)我們設(shè)置了這個屬性以后就可以繼續(xù)對此端口進(jìn)行監(jiān)聽。 但是這就引出了另外的一個問題,就是設(shè)置這個屬性后允許一個套接字上同時有兩個應(yīng)用程序進(jìn)行監(jiān)聽,那系統(tǒng)究竟會將數(shù)據(jù)發(fā)送給哪一個程序呢?系統(tǒng)會將數(shù)據(jù)首先交給監(jiān)聽IP最確定的應(yīng)用程序。例如應(yīng)用程序A在調(diào)用監(jiān)聽函數(shù)時設(shè)置的屬性是addr.sin_addr.S_addr := INADDR_ANY;而另外的一個應(yīng)用程序B則監(jiān)聽的地址為addr.sin_addr.S_addr := inet_addr(PChar(sMainIP));同時這兩個應(yīng)用程序監(jiān)聽的端口都是相同的,這是系統(tǒng)接收到數(shù)據(jù)后會首先交給B然后再交給A。因此一般為了程序安全我們會禁止這種情況的發(fā)生。因此需要設(shè)置下面的SO_EXCLUSIVEADDRUSE屬性。 ? Delphi和C++的設(shè)置方法為: http://web1344759.web186.badudns.cc/showHtec.asp?id=238
轉(zhuǎn)載于:https://blog.51cto.com/fxh7622/516374
總結(jié)
以上是生活随笔為你收集整理的TCP协议属性设置之SO_REUSEADDR属性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redhat enterprise 5
- 下一篇: 打嗝的解决方法