Linux網路程式設計(3) 多程序 多執行緒

2021-09-07 11:43:35 字數 1381 閱讀 2380

在我的

多程序

這裡多程序採用傳統的多程序模型。每當有client發來的連線時建立乙個程序來處理連線,乙個子程序相應乙個連線。

有了上篇單一程序的基礎,此處僅僅做簡單的改動便能夠實現。

while(1)

close(clientfd);

}

僅僅須要在while裡面加入程序的建立就可以,然後在子程序裡先關閉父程序的監聽套接字。

當然。不要忘了在上面加入fork錯誤處理的包裹函式(在fork一節中已講到)。

void error_msg(char *msg)

int fork()

執行結果:

多執行緒

執行緒和程序在非常多方面是相通的,仿照上面的多程序的傳統模型。不難實現多執行緒的傳統模型。

依舊是在while裡面做簡單的改動就可以。

clientfd = (int*)malloc(sizeof(int));

*clientfd = accept(servfd, (struct sockaddr*)&cliaddr, &clientlen);

host = gethostbyaddr((const char*)&cliaddr.sin_addr.s_addr, sizeof(cliaddr.sin_addr.s_addr), af_inet);

printf("server connect to host: %s %s\n",host->h_name, inet_ntoa(cliaddr.sin_addr));

pthread_create(&tid, null, &thread, clientfd);

close(*clientfd);

使用malloc是為了避免因為多執行緒訪問了同樣的clientfd從而出現無法預估的後果,全部手動分配。

執行緒函式為

void *thread(void* arg)
執行結果:

這段**有個問題,clientfd傳入執行緒之後。arg指標沒有接收到值,指在了乙個無法訪問的地方(gdb顯示值為0x00),百思不得其解。

(原理非常easy,遇到的問題先記錄下,假設有人知道錯在**希望能指正出來。。

環境 ubuntu 64位,編譯器gcc)

Linux網路程式設計多程序模型

include include include include include include include define serv port 8080 define maxline 100 define maxsize 4096 void sys error const char fun str...

Linux網路程式設計之多程序

多程序模型 多程序模型下,注意如何在程序之間通訊以及孤兒程序和殭屍程序的處理,可以外配上程序池作為計算任務 非同步任務的處理。fork server include include include include include include include include include voi...

linux多程序程式設計

在linux中,執行的乙個程序,會占去linux的三個地方,區,堆疊區和資料區.如果同時執行多個相同的程式,他們就會使用相同的 區,區中存放的就程式的 但是資料區和堆疊區分別存放的是程式的資料,全域性變數和區域性變數,因此即使是相同的程式,也不可同時使用相同的資料和堆疊區.include inclu...