日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

socket:REUSEADDR與REUSEPORT選項

作者:skysky97 更新時間: 2022-08-13 編程語言

SO_REUSEADDR是創建socket時比較常用的選項,通過該選項讓多個socket可以
bind相同的端口。

具體來說SO_REUSEADDR帶來2個功能:

  • 允許多個socket同時bind到相同的地址(IP+PORT)。
  • 允許bind處于TIME_WAIT狀態的端口。

開啟這個選項,對于TCP而言,不同的socket可以bind到相同的地址,然后connect
不同的目標地址。如果試圖連接相同的目標地址,則會報錯,因為五元組都相同
時無法區分不同的連接。如果執行listen操作,同樣會報錯,因為SO_REUSEADDR
不能用于listen,也就是說不能在相同地址上啟動多個tcp server。

UDP不需要listen,開啟SO_REUSEADDR使得UDP類型的socket可以重復bind相同的地址。
但是綁定成功并不意味著能正常接收數據。

UDP廣播和組播

  • 所有socket都能收到數據。

UDP單播

  • 總是最新創建的socket收到數據。
  • 新創建的socket在close后,次新創建的socket開始接收數據。

REUSEPORT功能基本與REUSEADDR相似,不同點在于:

  • tcp使用REUSEPORT選項可以bind并listen相同的端口,多個listen以負載均衡的方式
    接收新連接。但是連接創建后,數據接收是固定的。

  • udp使用REUSEPORT選項bind到相同地址,多個socket以負載均衡的方式接收數據。

  • REUSEPORT要求進程屬于相同的user,而REUSEADDR沒有這個要求。

參考鏈接:https://medium.com/uckey/so-reuseport-addr-2-2-how-packets-forwarded-to-multiple-sockets-ce4b83cd0fd2

原文鏈接:https://blog.csdn.net/skysky97/article/details/126252236

欄目分類
最近更新