Linux C TCP服务器收不到报文

来源:互联网 发布:屏风专卖店淘宝网 编辑:程序博客网 时间:2024/05/19 00:40

TCP服务器收不到报文

本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:


问题描述
最近写了一个tcp服务器,测试发现始终收不到服务器报文。


问题原因
进一步调试发现了问题所在,accept函数如下:

//if ((client_sock = accept(server_sock, (struct sockaddr *)&addr, &len)) < 0)if ((client_sock = accept(server_sock, (struct sockaddr *)&addr, &len) < 0)) {    ERROR("accept() failed,ret:%d err: %d,[%s].",client_sock, errno, strerror(errno));    return -1;}DEBUG("Accpet client sock %d\n");

注释掉的accept判断方法即为BUG原因,由于=运算符优先级低于<运算符的优先级,导致client_sock的值最后只有0和1,因此才无法正常收到报文。


解决方法

//写法一if ((client_sock = accept(server_sock, (struct sockaddr *)&addr, &len) < 0)){...}//写法二client_sock = accept(server_sock, (struct sockaddr *)&addr, &len);if (client_sock < 0) {...}

规避方法
养成写法二的编码格式习惯,提高容错率

原创粉丝点击