服务端
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#define PORT 8888
#define IP "127.0.0.1"
void catch_SIGCHLD(int signum){
int waitret;
while( (waitret = waitpid(-1,NULL,WNOHANG)) > 0);
printf("cleaned %d\n",waitret);
return;
}
int main(){
int sfd = socket(AF_INET,SOCK_STREAM,0);
if(sfd == -1){
perror("socket error");
exit(1);
}
struct sockaddr_in serv_addr;
socklen_t serv_len;
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
inet_pton(AF_INET,IP,&serv_addr.sin_addr.s_addr);
serv_len = sizeof(serv_addr);
int ret = bind(sfd,(struct sockaddr*)&serv_addr,serv_len);
if(ret == -1){
perror("bind error");
exit(2);
}
ret = listen(sfd,128);
if(ret == -1){
perror("listen error");
exit(3);
}
struct sockaddr_in clie_addr;
int cfd;
pid_t pid;
while(1){
socklen_t clie_len = sizeof(clie_addr);
cfd = accept(sfd,(struct sockaddr*)&clie_addr,&clie_len);
pid = fork();
if(pid == -1){
perror("fork error");
exit(4);
}else if(pid == 0){
close(sfd);
break;
}else{
close(cfd);
struct sigaction act;
act.sa_handler = catch_SIGCHLD;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
ret = sigaction(SIGCHLD,&act,NULL);
if(ret == -1){
perror("sigaction error");
exit(5);
}
}
}
char buf[BUFSIZ];
int len,i;
while(1){
len = read(cfd,buf,sizeof(buf));
for(i = 0; i < len; i++){
buf[i] = toupper(buf[i]);
}
write(cfd,buf,strlen(buf));
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)