- 论坛徽章:
- 0
|
- while(1)
- {
-
- tv_sock.tv_sec = 3;
- tv_sock.tv_usec = 0;
-
- FD_ZERO(&rdfds);
- FD_SET(sockfd,&rdfds);
-
- ret_socket =select(sockfd+1,&rdfds,NULL,NULL,&tv_sock);
- //!!!!!!我的想法:这个我就是想看看网络是否有新连接可读,所以只监视读描述符集
- if(ret_socket == 0) printf("!!!!!!!!!!!!!!!!time out\n");
- else if(ret_socket > 0 ) printf("select instrsting happen socketfd=%d\n",ret_socket);
- else perror("select");
-
- if(ret_socket >0) {
- if(FD_ISSET(sockfd,&rdfds) ){
- printf("new read client\n");
- ret_rd= accept(sockfd,(struct sockaddr *)&peer_addr,(void*)&len2);
- }
- while(ret_rd > 0)
- {
-
- tv_rd.tv_sec = 3;
- tv_rd.tv_usec = 0;
-
- FD_ZERO(&rd_rdfds);
- FD_SET(ret_rd,&rd_rdfds);
- rd_wdfds = rd_rdfds;
- // 我的想法:将新描述符集加入读集 写集
- ret_sock_wr = select(ret_rd+1,&rd_rdfds,&rd_wdfds,NULL,&tv_rd);
- //!!!!!!!我的想法:select()监视新描述符读写集变化情况,但为什么新描述符一直可写呢?
- if(ret_sock_wr < 0) {
- printf("ret_sock_wr select()err\n");
- break;
- } else if(ret_sock_wr == 0) {
- printf("!!!timeout\n");
- } else {
- printf("hvae change\n");
- }
- 一直打印printf(have change)
复制代码yulihua49 发表于 2013-03-07 10:01 ![]()
你那个socket是监听端口,不可以写的。
经过accept后产生的工作端口才可以写。
先用rfds。 |
|