这个方法只适用于c/s单独读写的那种:
例如client端只读数据,server只写数据。
server端:
140 cur_rfds = glb_rfds;
141 if(select(maxfd+1,&cur_rfds,NULL,NULL,0) < 0)
142 {
143 perror("fail to select");
144 exit(1);
145 }
146
147 for(i = 0;i <= maxfd;i++) {
148 if(FD_ISSET(i,&cur_rfds))
149 {
150 if(i == 0)
151 {
152 fgets(buf,MAXBUF,stdin);
153 if(strncmp(buf,"quit",4) == 0)
154 {
155 for(i=0;i<=maxfd;i++)
156 close(i);
157 exit(0);
158 }
159 }
160 else if(i == listenfd)
161 {
162 len = sizeof(struct sockaddr_in);
163 connectfd = accept(listenfd,(struct sockaddr *)&their_addr,&len);
164 printf("accepted %s, connectfd = %d\n",inet_ntoa(their_addr.sin_addr), connectfd);
165 FD_SET(connectfd,&glb_rfds);
166 maxfd = maxfd > connectfd ? maxfd : connectfd;
167 friends[linkcount].fd = connectfd;
168 friends[linkcount].to_fd = connectfd;
169 friends[linkcount].addr = their_addr.sin_addr.s_addr;
170 linkcount++;
171 }
172 else
173 {
174 {
175 printf("addr %s is shutdown\n",inet_ntoa(Get_ClientAddr(friends,linkcount,i)));
176 close(i);
177 FD_CLR(i,&glb_rfds);
178 }
181
182 }
183 }
184 }
client端: close(sockfd);