Advertisement
Pater92

select_t.c

Nov 23rd, 2014
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.90 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3. #include <sys/time.h>
  4. #include <sys/types.h>
  5. #include <unistd.h>
  6.  
  7.  
  8. #include <sys/socket.h>
  9. #include <fcntl.h>
  10. #include <string.h>
  11. #include <errno.h>
  12. #include <stdlib.h>
  13. #include <netinet/in.h>
  14. #include <arpa/inet.h>
  15.  
  16.  
  17. #define SOCKET_ERROR   ((int)-1)
  18. #define MAXFD 10
  19. #define BUFSIZE 10000
  20.  
  21.  
  22. int new_listener(unsigned short int local_port_number){
  23.  
  24.     struct sockaddr_in Local, From;
  25.     int socketfd,ris;
  26.     socketfd = socket(AF_INET,SOCK_DGRAM,0);
  27.     if (socketfd == SOCKET_ERROR) {
  28.         printf ("socket() failed, Err: %d \"%s\"\n", errno,strerror(errno));
  29.         exit(1);
  30.     }
  31.  
  32.     memset(&Local, 0,sizeof(Local));
  33.     Local.sin_family =AF_INET;
  34.     Local.sin_addr.s_addr=inet_addr("127.0.0.1");
  35.     Local.sin_port=htons(local_port_number);
  36.     ris=bind(socketfd,(struct sockaddr*)&Local,sizeof(Local));
  37.     if (ris == SOCKET_ERROR)  {
  38.         printf ("bind() 1 failed, Err: %d \"%s\"\n",errno,strerror(errno));
  39.         exit(1);
  40.     }
  41.  
  42. }
  43.  
  44.  
  45. int main(int argc, char *argv[]){
  46.    
  47.     char buffer[BUFSIZE];
  48.     fd_set rfds,wfds;
  49.     struct timeval tv;
  50.     int i,msglen,h[MAXFD],retval;
  51.  
  52.     FD_ZERO(&rfds);
  53.     for(i=1;i<argc;i++){
  54.         h[i-1]=new_listener(atoi(argv[i]));
  55.         FD_SET(h[i-1], &rfds);
  56.     }
  57.  
  58.     FD_ZERO(&wfds);
  59.     FD_SET(1,&wfds);
  60.  
  61.     /* Wait up to five seconds. */
  62.     tv.tv_sec = 5;
  63.     tv.tv_usec = 0;
  64.  
  65.     retval = select(1, &rfds, &wfds, NULL, &tv);
  66.     /* Don’t rely on the value of tv now! */
  67.  
  68.     if (retval == -1)
  69.         perror("select()");
  70.     else if (retval){
  71.         printf("Data is available now.\n");
  72.         for(i=1;i<argc;i++){
  73.             if (FD_ISSET(h[i-1], &rfds)){
  74.                 msglen=recv(h[i-1], buffer, BUFSIZE, 0);
  75.                 if (msglen>=0) printf("%s\n",buffer);
  76.             }
  77.         }
  78.     }
  79.     else
  80.         printf("No data within five seconds.\n");
  81.  
  82.  
  83.     return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement