socket 子程序bind埠占用問題

2021-09-24 04:20:43 字數 601 閱讀 8308

發現乙個socket引數可以在子程序執行的時候可以不繼承父程序(fork)的控制代碼,父程序退出、子程序未退出的情況下,可以在下次父程序重新執行時,再次bind的時候不會失敗。

/* close server socket on exec so cgi's can't write to it*/

if (fcntl(server_s, f_setfd, 1) == -1)

之前遇到的nvr rtsp重啟會提示554埠占用可以用這種解決辦法

(554埠占用問題,通過killall所有子程序的方式,避免了該問題)

// 和fcntl(server_s, f_setfd, 1)等效,但這是標準寫法,即用 fd_cloexec 取代直接寫1

int tflags = fcntl(fd, f_getfd);

fcntl(fd, f_setfd, tflags | fd_cloexec);

msfs的disk之前也有這個問題,在open的時候加上o_cloexec標誌。

以後建立控制代碼的時候可以設定一下這個值,這樣子程序才不會有太多從父程序繼承的控制代碼,減少系統開銷。

socket 埠 程序的關係

socket 埠 程序的關係!埠是tcp ip協議中的概念,描述的是tcp協議上的對應的應用,可以理解為基於tcp的系統服務,或者說系統程序!如下圖,ftp就需要占用特定的tcp埠。而 socket 呢,是網路程式設計中的概念,對tcp ip協議進行了抽象和實現,並為應用層提供介面。這裡的應用a,可...

socket 埠 程序的關係

socket 埠 程序的關係 2017年06月25日 15 12 06 socket 埠 程序的關係!埠是tcp ip協議中的概念,描述的是tcp協議上的對應的應用,可以理解為基於tcp的系統服務,或者說系統程序!如下圖,ftp就需要占用特定的tcp埠。而 socket 呢,是網路程式設計中的概念,...

socket位址和埠重用(造成bind出錯)

其實這個問題在richard stevens的 unix網路程式設計指南 卷一里有很詳細的 解答 中文版p166 168頁 這裡我只是寫幾個基本的例子來驗證這個問題。首先宣告乙個問題 當兩個socket的address和port相衝突,而你又想重用地 址和埠,則舊的socket和新的socket都要...