【bug】Socket operation on non-socket


bug代碼

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <errno.h>
 4 #include <sys/types.h>          
 5 #include <sys/socket.h>
 6 #include <netinet/in.h>
 7 #include <netinet/ip.h>
 8 #include <string.h>
 9 
10 #define handdle_error(msg)\
11     do{perror(msg);exit(EXIT_FAILURE);}while(0)
12 
13 #define BACK_LOG 10
14 #define BUF_SIZE 1024
15 int main(int argc, char** argv)
16 {
17     int sfd, cfd;
18     if (sfd = socket(AF_INET, SOCK_STREAM, 0) == -1)
19         handdle_error("create socket fail:");
20 
21     struct sockaddr_in servaddr;
22     memset(&servaddr, 0, sizeof(sockaddr_in));
23     servaddr.sin_family = AF_INET;
24     servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
25     servaddr.sin_port = htons(6666);
26     if ((bind(sfd, (struct sockaddr*)&servaddr, sizeof(servaddr))) == -1)
27         handdle_error("bind socket error:");
28 
29     if ((listen(sfd, BACK_LOG)) == -1)
30         handdle_error("listen socket fail:");
31 
32     char buf[BUF_SIZE];
33     int rcv;
34     std::cout << "prepare to receive message" << std::endl;
35     while (1)
36     {
37         if ((cfd = accept(sfd, (sockaddr*)NULL, NULL)) == -1)
38         {
39             std::cout << "accept socket fail:%s(error no:%d)" << strerror(errno) << errno << std::endl;
40             continue;
41         }
42         if (rcv = recv(cfd, (void*)buf, BUF_SIZE, 0) < 0)
43         {
44             std::cout << "recv socket fail:%s(error no:%d)" << strerror(errno) << errno << std::endl;
45             continue;
46         }
47         buf[rcv] = '\0';
48         std::cout << "receive message from client is:" << buf << std::endl;
49     }
50     return 0;
51 }

編譯OK,運行報錯

根據提示說明是第26行報錯

但是看代碼一點問題沒有

原因是socket創建sfd那里除了問題,正確寫法,見右側

這種()不匹配問題往往十分隱晦,一個好的方法是在()兩側流出空格,這樣在語法高亮器的輔助下更容易發現問題

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM