任务1:完成多进程多线程并发服务器搭建
多进程并发:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <string.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdlib.h>
#define IP "192.168.8.82"
#define PORT 8888
#define ERR_MSG(msg) do{\
fprintf(stderr,"__%d__",__LINE__);\
perror(msg);\
}while(0)
int function(int newfd,struct sockaddr_in cin);
typedef void (*sighandler_t)(int);
void handler(int sig)
{
while(waitpid(-1,NULL,WNOHANG)>0);
}
int main(int argc, const char *argv[])
{
sighandler_t s=signal(SIGCHLD,handler);
if(SIG_ERR==s){
ERR_MSG("signal");
return -1;
}
int sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0){
ERR_MSG("socket");
return -1;
}
int value=1;
if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&value,sizeof(value))<0){
ERR_MSG("setsockopt");
return -1;
}
struct sockaddr_in server;
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=inet_addr(IP);
if(bind(sockfd,(struct sockaddr*)&server,sizeof(server))<0){
ERR_MSG("bind");
return -1;
}
if(listen(sockfd,128)<0){
ERR_MSG("listen");
return -1;
}
int newfd;
pid_t pid;
struct sockaddr_in cin;
socklen_t len=sizeof(cin);
while(1){
newfd=accept(sockfd,(struct sockaddr*)&cin,&len);
if(newfd<0){
ERR_MSG("accept");