亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 8524 | 回復(fù): 6
打印 上一主題 下一主題

[C] linux select 返回-1 errno是Bad address [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-06-08 11:16 |只看該作者 |倒序?yàn)g覽
本帖最后由 liqingfang 于 2011-06-08 11:50 編輯

現(xiàn)在linux平臺(tái)用select還是存在的,這個(gè)只是測試代碼,但應(yīng)該沒問題,出錯(cuò)的原因老是select調(diào)用返回-1,errno的信息是Bad address,但select之前的bind是沒有報(bào)錯(cuò)的,怎么會(huì)是Bad address呢,望各位高手指點(diǎn)。謝謝!
  1.         struct sockaddr_in myname,cliaddr;
  2.         fd_set fdread;
  3.         struct timeval timeout;
  4.         pid_t pid;
  5.         socklen_t addrlen;
  6.         int new_sock = 0;
  7.         myname.sin_family = AF_INET;
  8.         myname.sin_port = htons(7878);
  9.         bzero(&myname.sin_zero,8);
  10.         inet_aton("192.168.1.216",&myname.sin_addr);       
  11.        
  12.        

  13.         int sock = socket(AF_INET,SOCK_STREAM,0);
  14.         if(sock<0)
  15.         {
  16.                 syslog(LOG_ERR,"can not create socket");
  17.                 return -1;        
  18.             }


  19.         fcntl(sock,F_SETFL,O_NONBLOCK);

  20.         int flag = 0;
  21.         if(setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(char *)&flag,sizeof(flag))<0)
  22.             {
  23.                 syslog(LOG_ERR,"can not set sock opt");
  24.                 return -1;
  25.             }
  26.        

  27.         syslog(LOG_INFO,"before bind errno is %s",strerror(errno));       

  28.         if(bind(sock,(struct sockaddr *)&myname,sizeof(myname))<0)
  29.             {
  30.                  syslog(LOG_ERR,"can not bind addr");
  31.                  return -1;
  32.             }
  33.         syslog(LOG_INFO,"after bind  errno is %s",strerror(errno));        
  34.             if(listen(sock,7)<0)
  35.             {
  36.                 syslog(LOG_ERR,"can not listen");
  37.                 return -1;
  38.             }
  39.          syslog(LOG_INFO,"after listen  errno is %s",strerror(errno));
  40.             //fd_set  fdread;
  41.         syslog(LOG_INFO,"Listening for connections on port %d\n",htons(myname.sin_port));


  42.                
  43.         while(1)       
  44.         {
  45.                 while(1)
  46.                 {
  47.                
  48.                        FD_ZERO(&fdread);
  49.                       FD_SET(sock,&fdread);
  50.                        
  51.                         timeout.tv_sec = 0;
  52.                         timeout.tv_usec = 500000;
  53.                
  54.                         syslog(LOG_INFO,"before select errno is %s",strerror(errno));       
  55.                          if(!FD_ISSET(sock,&fdread))
  56.                         {
  57.                                 syslog(LOG_INFO,"fd is not set");
  58.                         }

  59.                         int reval = select(sock+1,&fread,NULL,NULL,&timeout);
  60.                         //syslog(LOG_INFO,"select get val is %d\n",reval);
  61. //                        printf("errno is %d\n",errno);
  62. //                        perror("perror");
  63. //                        printf("sterror:%s\n",strerror(errno));

  64.                 if(reval<0)
  65.                 {
  66.                         syslog(LOG_INFO,"Error");
  67.                         syslog(LOG_INFO,"errno is %s",strerror(errno));       
  68.                 }
  69.                 else if(reval==0)
  70.                 {
  71.                         syslog(LOG_INFO,"Wait----");       
  72.                         continue;
  73.                 }
  74.                 else
  75.                 {
  76.                         syslog(LOG_INFO,"(((((()))))))");
  77.                        
  78.                         new_sock = accept(sock,0,0);
  79.        
  80.                 ------

  81. }       
復(fù)制代碼
log輸出為:

論壇徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52雙子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午馬
日期:2013-10-18 21:43:38
2 [報(bào)告]
發(fā)表于 2011-06-08 11:24 |只看該作者
每次select之前都要
         FD_ZERO(&fdread);

         FD_SET(sock,&fdread);

論壇徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52雙子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午馬
日期:2013-10-18 21:43:38
3 [報(bào)告]
發(fā)表于 2011-06-08 11:25 |只看該作者
另外select中用兩個(gè)&fread可能也是不對(duì)的,得用兩個(gè)fd_set

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2011-06-08 11:27 |只看該作者
之前我就是寫在while循環(huán)里面的,現(xiàn)在改了,測試,也不行,

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2011-06-08 11:55 |只看該作者
回復(fù) 3# hellioncu


    fd是在文件描述符集合中增加一個(gè)新的文件描述符,其實(shí)是不用的另外再添加一個(gè)fd_set(sock,&fdread),我已經(jīng)修改了代碼,還是不能通過,請(qǐng)指教,這個(gè)問題困擾很長時(shí)間了

論壇徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52雙子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午馬
日期:2013-10-18 21:43:38
6 [報(bào)告]
發(fā)表于 2011-06-08 12:00 |只看該作者
回復(fù)  hellioncu


    fd是在文件描述符集合中增加一個(gè)新的文件描述符,其實(shí)是不用的另外再添加一個(gè)fd ...
liqingfang 發(fā)表于 2011-06-08 11:55



    int reval = select(sock+1,&fread,NULL,NULL,&timeout);

你寫錯(cuò)了,應(yīng)該是fdread{:3_184:}

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2011-06-08 12:46 |只看該作者
哎呦,我的媽啊,怎么還出這種低級(jí)錯(cuò)誤,用vim編譯的,謝謝樓上
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP