(unix網路程式設計)tcp回射程式二 避免殭屍程序

2021-06-19 17:43:29 字數 1924 閱讀 7577

本例在上一例的基礎上增加了singal函式來捕捉子程序退出時候產生的sigchld訊號,從而防止子程序變成殭屍程序。

伺服器端的**如下:

#include #include #include #include #include #include #include #include #include #include #define maxline 4096

#define serv_port 5000

#define listenq 5

void str_echo(int sockfd)

if (write(sockfd, buf, n) < 0)

memset(buf, 0x00, maxline);

} if (n < 0 && errno != eintr) }}

void sig_chld(int signo)

}int main(int argc, char **argv)

memset(&servaddr, 0x00, sizeof(servaddr));

servaddr.sin_family = af_inet;

servaddr.sin_addr.s_addr = htonl(inaddr_any);

servaddr.sin_port = htons(serv_port);

if (bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)

if (listen(listenfd, listenq) < 0)

signal(sigchld, sig_chld);

for(;;)

if ((childpid = fork()) == 0)

str_echo(connfd);

exit(0);

} if (close(connfd) < 0)

}}

客戶端**如下:

#include #include #include #include #include #include #include #define serv_port 5000

#define maxline 4096

void str_cli(file *fp, int sockfd)

if (write(sockfd, sendline, strlen(sendline)) < 0)

if (read(sockfd, recvline, maxline) == 0)

if (fputs(recvline, stdout) == eof)

memset(sendline, 0x00, maxline);

memset(recvline, 0x00, maxline);

} if ((write(sockfd, quit_code, strlen(quit_code))) < 0)

}int main(int argc, char **argv)

if ((sockfd = socket(af_inet, sock_stream, 0)) < 0)

memset(&servaddr, 0x00, sizeof(servaddr));

servaddr.sin_family = af_inet;

servaddr.sin_port = htons(serv_port);

if (inet_pton(af_inet, argv[1], &servaddr.sin_addr) < 0)

if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)

str_cli(stdin, sockfd);

exit(0);

}

TCP網路程式設計之echo回射程式

tcp網路程式設計有三個例子最值得學習研究,分別是echo chat proxy,都是長連線協議。接下來,把這幾個例子都實現。本節用乙個簡單的例子來講tcp客戶 伺服器程式框架,這也是echo的實現。程式的基本流程 客戶從標準輸入鍵入一行文字,並傳送給伺服器。伺服器接收到文字之後回射給客戶端。客戶端...

TCP 回射程式

客戶端從標準輸入讀入一行文字,並發給伺服器 伺服器從網路輸入讀入這行文字,並且回射給客戶 客戶從網路輸入讀入這行回射文字,並且顯示在標準輸出上。伺服器從網路讀入和返回 void str echo int sockfd while 1 int main 父程序中關閉已連線套接字 close connf...

用select實現TCP回射程式(伺服器及客戶端)

該程式系參考 unp 來編寫的,主要用來練習select及shutdown函式的使用。伺服器 include include include include include include include include include include include define port 888...