listenfd=socket(...)
bind(listenfd,..)
listen(listenfd,..)
signal(sigchld,sig_chld) //特意加上處理僵死程序,請看2
for(;;)
close(connfd) //連線套接字有子程序負責,父程序關了它
}伺服器子程序終止時,給父程序傳送乙個sigchld訊號
sigchld訊號是由核心在任何乙個程序終止時發給它的父程序的乙個訊號 核心傳送給程序
所以我們在上面的偽**上加上sigchld處理
sigchld是不可靠訊號,不排隊,處理方法是在乙個迴圈內使用waitpid 注意加引數wnohang
程序在accept阻塞時收到訊號,如果核心無法自動重啟accept,則accept返回eintr錯誤,我們只需要自己重啟accept就行,在**中檢視errno==eintr,然後重新accept;
實驗表明linux會自己重啟該系統呼叫,我們就可以不擔心這個問題,但是為了我們的**在其他unix的作業系統也能很好地執行,最好把這個問題處理,就幾行**的事。
多程序伺服器
基於tcp實現多程序伺服器 伺服器端 1 建立套接字 include include int socket int domain,int type,int protocol domain 乙個位址描述。目前僅支援af inet格式,也就是說arpa internet位址格式。type 指定socke...
多程序伺服器
注意 包含了 wrap.c 和 wrap.h 檔案在上篇部落格中 server.c include include include in.h include include include include include include wrap.h define maxline 8192 defi...
網路程式設計筆記 多程序伺服器
併發伺服器實現模型和方法主要有三種 1 多程序伺服器端 通過建立多個程序提供服務 2 多路復用伺服器 通過 並統一管理io物件提供服務 3 多執行緒伺服器 通過生成與客戶端等量的執行緒提供服務 用sigaction訊號處理技術消滅殭屍程序。這裡不詳述 多程序伺服器端實現echo伺服器。每當客戶端請求...