我已經創建了一個preforking web服務器,該服務器創建服務器套接字,綁定服務器套接字,偵聽地址和端口,並預先指定數量的作爲服務於客戶端請求的工作人員的工作人員(子進程)。進行套接字編程時,是否需要使用鎖定函數作爲accept函數?
所有工作程序都會繼承父服務器的套接字描述符並使用它來接受客戶端請求。子進程以「並行」方式作爲自治進程運行,並使用服務器套接字描述符的accept函數。在接受客戶請求或操作系統爲我執行此操作時,是否必須對accept函數使用鎖定和解鎖機制?這裏的想法是,多個進程使用通用服務器套接字描述符來接受客戶端請求。我是否必須用互斥機制來屏蔽這種情況,以避免競爭狀況或僵局?
請注意我在accept函數中使用I/O非阻塞。
我有以下代碼:
for(;;) {
int client = accept(...);
if (client < 0) continue;
...
}
我應該使用類似:
for(;;) {
lock();
int client = accept(...);
unlock();
if (client < 0) continue;
...
}
?
http://stackoverflow.com/questions/1981372 –
該文章處理不同的線程和發送/ recv調用。但是,我想知道在不同的流程中接受呼叫。 –
這不是真的嗎? –