網站首頁 編程語言 正文
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
相關推薦
- 2022-02-25 C語言函數棧幀的創建和銷毀介紹_C 語言
- 2022-09-30 GO中sync包自由控制并發示例詳解_Golang
- 2022-04-18 Python的類成員變量默認初始值的坑及解決_python
- 2022-06-27 python?使用ctypes調用C/C++?dll詳情_python
- 2022-09-15 SQL?bool盲注和時間盲注詳解_MsSql
- 2023-01-19 GO的基礎知識掃盲注意事項_Golang
- 2023-07-24 uniapp開發小程序端原生導航欄
- 2022-10-16 Qt實現進程間通信_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支