【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-2026 CODEPRJ.COM