setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr));listen(listenfd,5);udpfd=socket(AF_INET,SOCK_DGRAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_addr.s_addr=htonl(INADDR_ANY);servaddr.sin_port=htons(SERV_PORT);bind(udpfd,(struct sockaddr*)&servaddr,sizeof(servaddr));signal(SIGCHLD,sig_child);FD_ZERO(&rset);maxfdpl=max(listenfd,udpfd)+1;for(;;){FD_SET(listenfd,&rset);FD_SET(udpfd,&rset);if((nready=select(maxfdpl,&rset,NULL,NULL,NULL))<0){if(errno==EINTR)continue;elseprintf("select error");}if(FD_ISSET(listenfd,&rset)){len=sizeof(cliaddr);connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&len);if((childpid=fork())==0){close(listenfd);str_echo(connfd);exit(0);}close(connfd);}if(FD_ISSET(udpfd,&rset)){len=sizeof(cliaddr);n=recvfrom(udpfd,msg,MAXLINE,0,(struct sockaddr*)&cliaddr,&len);sendto(udpfd,msg,n,0,(struct sockaddr*)&cliaddr,len);printf("data received %s",msg);}}}void str_echo(int sockfd){ssize_t n;char buf[1024];