fork併發伺服器

2021-10-01 09:22:39 字數 971 閱讀 5572

併發伺服器需要使用fork進行實現,其是unix中派生新程序的唯一方法。

fork函式定義

#include pid_t fork(void);
呼叫fork一次,返回兩次:

通過返回值告知程序本身當前是子程序還是父程序。

併發伺服器:

併發伺服器使用fork子程序來服務每個客戶。

典型使用:

listenfd = socket(...);

bind(listenfd , ...);

listen(listenfd , maxclient);

for(;;)

close(connfd);//父程序關閉連線套接字(引用計數再次減1,若為0,則真正關閉套接字。)

}

注意,上述**中,fork使得父子共享的引用計數變為2,執行close只是將引用計數減1,套接字真正的清理和資源釋放要等到引用計數為0時才執行。

如果確實想在某個tcp連線上發生fin,可以呼叫shutdown,其不管引用計數就能激發tcp正常終止系列。

#include int clode(int sockfd);

#include int showdown(int sockfd, int howto);

howto的方式有三種分別是

shut_rd(0):關閉sockfd上的讀功能,此選項將不允許sockfd進行讀操作。

shut_wr(1):關閉sockfd的寫功能,此選項將不允許sockfd進行寫操作。

shut_rdwr(2):關閉sockfd的讀寫功能。

併發伺服器圖示:

併發伺服器之fork

支援多個client與server連線並recv和write 每來乙個新的client,server都fork乙個子程序為client服務 子程序用於與client通訊 recv write 父程序的while 1 迴圈中,一直呼叫accept接收新的連線 當accept接收成功後,返回新的套接字n...

併發伺服器

併發伺服器 伺服器使用多個控制線程,同時處理多個客戶請求。有關併發執行的細節取決於所用作業系統。但其思路很簡單 併發伺服器程式被分為主程式 執行緒 和控制代碼兩部分,主程式只接受來自客戶的連線請求,並為該客戶建立乙個控制線程 每乙個控制線程只與乙個客戶互動,並執行控制代碼程式。當處理完乙個客戶後,該...

併發伺服器

1.select優點 跨平台缺點 對於單個程序的檔案描述符的數量存在最大限制linux一般為1024,32位機器位1024,64位機器位2048 2 對socket進行掃瞄時是一次掃瞄的,即採用輪詢的方法,效率較低 3.遍歷列表浪費cpu時間 poll優點 解決了套接字的上限問題 缺點 效率跟sel...