linuxsocket埠
❶ 淺談linux下Socket選項設置
TCP/IP協議棧是Linux內核的基石,而Socket層作為TCP/IP層與應用層之間的橋梁,提供了諸如socket/bind/accept/connect等抽象介面,大大簡化了網路編程。Socket選項為滿足用戶定製需求而生,涵蓋了地址復用、埠復用、讀寫超時時間、緩沖區大小等。在Linux中,Socket選項分布在TCP層、IP層與Socket層等,設置時需指定level。通過圖示可以直觀了解Socket層及各層支持的選項。常用操作Socket選項的API包括getsockopt、setsockopt、fcntl和ioctl。函數調用時需遵循特定的參數格式,明確level、optname、optval類型與長度。optval與optlen作為參數,與操作的選項直接關聯,其中optval使用void*類型,optlen使用socklen_t*類型。socklen_t類型與int長度一致,避免了size_t在64位結構中的長度不一致問題。在讀寫選項時,optval與optlen的編寫需根據實際情況決定。SO_REUSEADDR選項用於解決重啟時綁定失敗的問題,允許同一地址和埠在TIME_WAIT狀態時被復用。SO_REUSEPORT選項在Linux3.9版本引入,允許多個進程監聽同一IP和埠,增加了對進程所屬用戶的限制,實現簡單的負載均衡。TCP_NODELAY選項用於解決網路擁塞問題,允許發送小包且不強制等待,適用於時效性高的應用。這些選項的設置方法和使用場景,為網路編程提供了豐富的靈活性與優化手段。
❷ linux下創建socket時如何實現指定網口
原理上只有 raw_socket 應該設置網口,正常的 socket 會根據路由來選擇出口。
如果需要指定網口,需要設置 SO_BINDTODEVICE,步驟如下:
填寫結構體 struct ifreq ifr 的 ifr.ifr_name 為指定的網口,如 "eth1"
setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr))
另外,如果只是需要進行測試,不防直接構包,用 libpcap 等庫來進行發送。而不要用系統的 socket 庫來發送。