Read without ads and support Scribd by becoming a Scribd Premium Reader.
 
#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<errno.h>#include<string.h>#include<sys/types.h>#include<sys/stat.h>#include<sys/select.h>#include<sys/time.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<fcntl.h>#include<signal.h>#define MAXLINE 1000#define SERV_PORT 56792void sig_child(int);void str_echo(int);int max(int,int);int main(int argc,char **argv){int listenfd,connfd,udpfd,nready,maxfdpl,n;char msg[MAXLINE];pid_t childpid;fd_set rset;ssize_t len;const int on=1;struct sockaddr_in cliaddr,servaddr;listenfd=socket(AF_INET,SOCK_STREAM,0);bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_addr.s_addr=htonl(INADDR_ANY);servaddr.sin_port=htons(SERV_PORT);
 
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];
Search History:
Searching...
Result 00 of 00
00 results for result for
  • p.
  • Notes
    Load more