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
如 調用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.