Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 2nd, 2012  |  syntax: C  |  size: 2.02 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/time.h>
  4. #include <sys/types.h>
  5. #include <sys/socket.h>
  6. #include <arpa/inet.h>
  7. #include <linux/socket.h>
  8. #include <netinet/in.h>
  9. #include <unistd.h>
  10. #include <sys/wait.h>
  11.  
  12. #define PORT 12345
  13.  
  14. int main(void)
  15. {
  16.   socklen_t inputlength;
  17.   fd_set rfds;
  18.   struct timeval tv;
  19.   int clilen;
  20.   int tcp_sockfd,udp_sockfd,newsockfd,qwe;
  21.   struct sockaddr_in tcp_servaddr,tcp_cliaddr,udp_servaddr;
  22.   char buff[1024];
  23.  
  24.  
  25.   //--------- TCP --------
  26.   tv.tv_sec=600;
  27.   tv.tv_usec=0;
  28.    
  29.   if((tcp_sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
  30.   {
  31.         perror("socket");
  32.   }
  33.  
  34.   tcp_servaddr.sin_family= AF_INET;
  35.   tcp_servaddr.sin_port=htons(PORT);
  36.   tcp_servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
  37.  
  38.   if(bind(tcp_sockfd, (struct sockaddr *) &tcp_servaddr, sizeof(tcp_servaddr)) < 0)
  39.   {
  40.         perror("bind");
  41.         close(tcp_sockfd);
  42.         exit(1);
  43.   }
  44.  
  45.   if(listen(tcp_sockfd, 2) < 0)
  46.   {
  47.         perror("listen");
  48.         close(tcp_sockfd);
  49.         exit(1);
  50.   }
  51.  
  52.   clilen=sizeof(tcp_cliaddr);
  53.  
  54.   FD_ZERO(&rfds);
  55.   FD_SET(tcp_sockfd,&rfds);
  56. //-----------------------
  57. //-------- UDP ----------
  58.  
  59.   if((udp_sockfd=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP))<0)
  60.   {
  61.         perror("socket");
  62.   }
  63.  
  64.   udp_servaddr.sin_family= PF_INET;
  65.   udp_servaddr.sin_port=htons(PORT);
  66.   udp_servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
  67.  
  68.   if(bind(udp_sockfd, (struct sockaddr *) &udp_servaddr, sizeof(udp_servaddr)) < 0)
  69.   {
  70.         perror("bind");
  71.         close(udp_sockfd);
  72.         exit(1);
  73.   }
  74. //----------------------
  75.  
  76.         qwe=fork();
  77.         if(qwe==0){
  78.           printf("fork for TCP: PID %d\n",getpid());
  79.           while(1){
  80.                 if(select(tcp_sockfd+1,&rfds,NULL,NULL,&tv)){
  81.                   if(FD_ISSET(tcp_sockfd,&rfds)) {
  82.                         newsockfd=accept(tcp_sockfd,(struct sockaddr*)&tcp_cliaddr,&clilen);
  83.                         recv(newsockfd,buff,1024,0);
  84.                         printf("\n%s\n",buff);
  85.                   }
  86.                 }
  87.           }
  88.         }
  89.         else{
  90.           while(1){
  91.                 while(recvfrom(udp_sockfd, (void *)buff, 1024, 0, (struct sockaddr *)&udp_servaddr, &inputlength))
  92.                   printf("\n%s\n",buff);
  93.           }
  94.         }
  95. exit(EXIT_SUCCESS);
  96. }