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函式之前要複製並儲存原有資訊,並在每次呼叫時傳遞新的監視物件資訊。傳遞新的監視物件資訊是資源消耗的主要原因,...