Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <sys/time.h>
- #include <sys/types.h>
- #include <unistd.h>
- #include <sys/socket.h>
- #include <fcntl.h>
- #include <string.h>
- #include <errno.h>
- #include <stdlib.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #define SOCKET_ERROR ((int)-1)
- #define MAXFD 10
- #define BUFSIZE 10000
- int new_listener(unsigned short int local_port_number){
- struct sockaddr_in Local, From;
- int socketfd,ris;
- socketfd = socket(AF_INET,SOCK_DGRAM,0);
- if (socketfd == SOCKET_ERROR) {
- printf ("socket() failed, Err: %d \"%s\"\n", errno,strerror(errno));
- exit(1);
- }
- memset(&Local, 0,sizeof(Local));
- Local.sin_family =AF_INET;
- Local.sin_addr.s_addr=inet_addr("127.0.0.1");
- Local.sin_port=htons(local_port_number);
- ris=bind(socketfd,(struct sockaddr*)&Local,sizeof(Local));
- if (ris == SOCKET_ERROR) {
- printf ("bind() 1 failed, Err: %d \"%s\"\n",errno,strerror(errno));
- exit(1);
- }
- }
- int main(int argc, char *argv[]){
- char buffer[BUFSIZE];
- fd_set rfds,wfds;
- struct timeval tv;
- int i,msglen,h[MAXFD],retval;
- FD_ZERO(&rfds);
- for(i=1;i<argc;i++){
- h[i-1]=new_listener(atoi(argv[i]));
- FD_SET(h[i-1], &rfds);
- }
- FD_ZERO(&wfds);
- FD_SET(1,&wfds);
- /* Wait up to five seconds. */
- tv.tv_sec = 5;
- tv.tv_usec = 0;
- retval = select(1, &rfds, &wfds, NULL, &tv);
- /* Donβt rely on the value of tv now! */
- if (retval == -1)
- perror("select()");
- else if (retval){
- printf("Data is available now.\n");
- for(i=1;i<argc;i++){
- if (FD_ISSET(h[i-1], &rfds)){
- msglen=recv(h[i-1], buffer, BUFSIZE, 0);
- if (msglen>=0) printf("%s\n",buffer);
- }
- }
- }
- else
- printf("No data within five seconds.\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement