Linux網路程式設計(五)

2021-08-02 22:14:01 字數 1476 閱讀 1007

linux伺服器模型。

udp伺服器通常採用迴圈伺服器模型,tcp伺服器通常採用併發伺服器模型

實現思路:伺服器建立偵聽socket,並建立子程序。所有子程序呼叫accept,無連線時將睡眠。有連線到來時所有子程序被喚醒。某乙個子程序接受連線後,其他程序繼續睡眠。

乙個預先建立子程序的例子。

//

// created by prime on 17-6-21.

//#include

#include

#include

#include

#include

#include

#include

#include

#define bufflen 1024

#define server_port 8888

#define backlog 5

#define pidnumb 3

static

void handle_connect(int s_s)

}void sig_int(int num)

int main()

}while(1);//不讓父程序退出,不然所有子程序都被init收養了(其實也沒關係,依舊可以執行)。

close(s_s);

return

0;}

實現思路1:

實現思路:

和上面的區別在於,這裡由父程序完成連線,然後把描述符傳給子程序。

#include 

#include

#include

#include

int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);

該函式可以先對需要操作的描述符進行查詢,看是否可讀、可寫或有錯誤。

各個引數解釋如下:

nfds:乙個整型變數,比檔案描述符集合中的最大的檔案描述符大1。

readfds:可讀的描述符集合。函式監視描述符集合中是否有描述符可讀,函式返回時將清除集合中不可讀的描述符。

writefds:同上,只不過是寫的描述符集合。

exceptfds:監視檔案集中的任何檔案是否發生錯誤。

timeout:設定最長等待時間,如果為null就工作在阻塞模式。

返回值大於零表示三個描述符集合中至少乙個不為空,返回0表示超時,-1表示錯誤。

伺服器實現思路:

要求將所有socket描述符設定為非阻塞方式。

特點:缺點

適合於請求多但請求內容少的伺服器。

Linux網路程式設計學習筆記(五)

通過捕捉sigchld訊號捕捉殭屍程序,可解決多個子程序同時連線的情況 伺服器端 include include include include include include include include include void error handling char message void...

Linux 網路程式設計五(UDP協議)

udp和tcp的對比 udp處理的細節比tcp少。udp不能保證訊息被傳送到目的地。udp不能保證資料報的傳遞順序。tcp處理udp不處理的細節。tcp是面向連線的協議 udp是無連線協議 tcp保持乙個連線 udp只是把資料傳送出去而已 tcp的優點 tcp提供以認可的方式顯示的建立連線和終止連線...

TCP IP 網路程式設計(五)

select並不是把發生變化的檔案描述符單獨集中到一起,而是通過觀察作為監視物件的fd set函式的變化,因此不能避免對所有監視物件的迴圈語句。而且,監視物件變數會發生變化,在呼叫select函式之前要複製並儲存原有資訊,並在每次呼叫時傳遞新的監視物件資訊。傳遞新的監視物件資訊是資源消耗的主要原因,...