socket perror 爲operation on non-socket 解決

出現問題,打log


如 調用connect  socket accept  函數出錯,可以 perror("socket"); perror("connect"); printf("%s\n",strerror(errno));都能打出具體的錯誤


select 函數再次強調:<0 : 出錯返回,=0:  正常,超時返回,就是沒有fd可讀可寫,只針對於非阻塞 >0: 正常返回,而且可以調用FDISSET函數去查fd; 






Socket operation on non-socket 錯誤出現有兩種情況:


      1.  建立socket:


                 if(listenfd= socket(AF_INET,SOCK_STREAM, 0)==-1){


                      perror("creating socket failed!");
                      exit(-1);
                 }


           會造成在bind時出現 Socket operation on non-socket錯誤


           正確的代碼應該是:


                  if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){
                        perror("creating socket failed!");
                        exit(-1);
                  }


      2.  accept時:


                 if(connfd=accept(listenfd,(struct sockaddr *)&client_addr,(socklen_t *)&sin_size)==-1){
                      perror("accept error!");
                      exit(-1);
                 }


           會造成在recv時出現  Socket operation on non-socket錯誤


           正確代碼是:


                 if((connfd=accept(listenfd,(struct sockaddr *)&client_addr,(socklen_t *)&sin_size))==-1){
                         perror("accept error!");
                         exit(-1);
                 }


   出現Socket operation on non-socket 錯誤的原因是:


            if(listenfd= socket(AF_INET,SOCK_STREAM, 0)==-1)


            if(connfd=accept(listenfd,(struct sockaddr *)&client_addr,(socklen_t *)&sin_size)==-1)


   這兩句中缺失了()造成的。賦值符合優先級最低,導致listenfd和connfd在創建/連接成功是爲0,不成功時爲1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章