/* server exa */ #include "cygwin/socket.h" #include "cygwin/in.h" #include #define INMAX 8*1024 #define LINEMAX 10*1024 #define SERV_TCP_PORT 4100 int sockfd,newsockfd,clilen,childpid; struct sockaddr_in cli_addr, serv_addr; char in[INMAX], line[LINEMAX], rest[LINEMAX]; char inlin[INMAX]; struct timeval timeout; fd_set fdvar; test_select() { int i; for (i=0; i<10; i++) printf ("select: %d\n",select(newsockfd,&fdvar,(fd_set *) 0, (fd_set *) 0, &timeout) ); } int do_read() { int rr, n, l, i,j; n = INMAX; FD_ZERO(&fdvar); FD_SET(newsockfd, &fdvar); timeout.tv_sec = 0; timeout.tv_usec = 1000; /* printf ("select: %d\n",select(newsockfd+1,&fdvar,(fd_set *) 0, (fd_set *) 0, &timeout) ); */ if (select(newsockfd+1,&fdvar,(fd_set *) 0, (fd_set *) 0, &timeout) <= 0) return(0); /* if (select(newsockfd+1,&fdvar,(fd_set *) 0, (fd_set *) 0, &timeout) <= 0) return(0); */ if (FD_ISSET(newsockfd,&fdvar) == 0) { return(0); } printf("FD:%d\n",FD_ISSET(newsockfd,&fdvar) ); /* return(0); */ rr = read(newsockfd,inlin,n); if (rr <= 0) { rr = 0; } inlin[rr] = '\0'; printf("(%d %d):%s",n,rr,inlin); return(rr); } int do_write(b,n) char b[]; int n; { int rr; rr = write(newsockfd,b,n); return(rr); } serv_main() { struct sockaddr_in cli_addr, serv_addr; if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) <0 ) { printf("Error: can't open socket.\n"); exit(-1); } bzero( (char *) &serv_addr, sizeof(serv_addr) ); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(SERV_TCP_PORT); if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { printf("Error: cannot bind socket.\n"); exit(-1); } listen(sockfd,5); clilen = sizeof(cli_addr); newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0) { printf("Error opening new socket.\n"); exit(-1); } /* printf("waiting for input line from client...\n"); printf("%d - ",read(newsockfd,in,10)); printf("'%s'\n",in); */ FD_ZERO(&fdvar); FD_SET(newsockfd, &fdvar); timeout.tv_sec = 0; timeout.tv_usec = 0; inlin[0] = '\0'; line[0] = '\0'; rest[0] = '\0'; /* test_select(); */ }