📄 ex14_echoserv.c
字号:
/*filename:ex14_echoserv.c*/
#include "ourhead.h"
void con_handle(int connfd)
{
ssize_t n;
char buf[MAXLINE+1];
for (;;)
{
if ((n=readline(connfd,buf,MAXLINE))==0)
return ;
if (write(connfd,buf,n)<0)
{
printf("write error\n");
exit(1);
}
}
return ;
}
void sig_handle(int signo)
{
pid_t pid;
int stat;
while((pid=waitpid(-1,&stat,WNOHANG))>0)
printf("child %d terminated\n",pid);
return ;
}
int main(int argc,char **argv)
{
int listenfd,connfd;
pid_t childpid;
socklen_t clilen;
struct sockaddr_in cliaddr,servaddr;
if ((listenfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("socket error \n");
exit(1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(9999);
if (bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
{
printf("bind error\n");
exit(1);
}
if (listen(listenfd,LISTENQ)<0)
{
printf("listen error\n");
exit(1);
}
signal(SIGCHLD,sig_handle);
for (;;)
{
clilen=sizeof(cliaddr);
if ((connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&clilen))<0)
{
if (errno==EINTR)
continue;
else
{
printf("accept error \n");
exit(1);
}
}
if ((childpid=fork())==0)
{
close(listenfd);
con_handle(connfd);
exit(0);
}
close(connfd);
}
close(listenfd);
exit(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -