socket返回值为0的问题
一、问题描述
socket_id为0,1,2的是给标准输入输出用的。当调用socket()来创建套接字时,返回值确实0,这时候如果进行读写,就是直接打印到控制台了。
二、什么情况下socket返回值为0
1. 如果我们调用close(0)之后,socket_id = 0的便处于“空闲”状态。用户利用socket函数创建套接字时,便可能会将0分配给新创建的socket。
这种情况下,一般是套接字声明时没初始化,使用了默认值0。比如:
//全局变量
int fd;
if (fd >= 0)
{close(fd); //close(0)
}
所以一般套接字句柄要初始化为 -1
//全局变量
int fd = -1;
if (fd >= 0)
{close(fd); fd = -1;
}
2. 编码时不注意运算符优先级关系导致
比如下面的代码:
while(g_pWanInfo->sockfd = networkConnect(SERVER_IP_DEFAULT, SERVER_PORTP_DEFAULT) < 0)
{}
小于号的优先级大于赋值,所以返回的句柄值会先和0进行比较,比较的结果为0,然后赋值给fd。这时候fd = 0
改为下面的就OK了:
while((g_pWanInfo->sockfd = networkConnect(SERVER_IP_DEFAULT, SERVER_PORTP_DEFAULT)) < 0)
{}
其实第二种情况是精简代码是要注意的问题。
socket返回值为0的问题相关推荐
- 获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题)
获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题) 参考文章: (1)获取可视区域高度赋值给div(解决document.body.client ...
- fread读结构体返回值是0无错误_嵌入式C编程之错误处理(附代码例子)!
原标题:嵌入式C编程之错误处理(附代码例子)! 作者: clover-toeic 前言 本文主要总结嵌入式系统C语言编程中,主要的错误处理方式.文中涉及的代码运行环境如下: 一.错误概念 错误分类 从 ...
- 程序“[4176] char.exe: 本机”已退出,返回值为 0 (0x0)
使用VS2010运行程序,黑屏一闪而过,说程序"[4176] char.exe: 本机"已退出,返回值为 0 (0x0) 解决方法是: 在引用头文件时,加上#include &qu ...
- 格子玻尔兹曼方法书中,计算机代码(Fortran语言)FDM的输出结果是什么,为什么显示程序“[25024] Console1.exe”已退出,返回值为 0 (0x0)。
格子玻尔兹曼方法书中,计算机代码(Fortran语言)FDM的输出结果是什么,为什么显示程序"[25024] Console1.exe"已退出,返回值为 0 (0x0).
- 程序“[3856] ConsoleApplication1.exe”已退出,返回值为 0 (0x0)
运行代码出现:程序"[3856] ConsoleApplication1.exe"已退出,返回值为 0 (0x0) 解决方法,在主函数中 return 0 前面加入一行 getch ...
- 【求助】AttachThreadInput 返回值为0,GetLastError取得的错误码为5(访问拒绝),怎么解决啊
[求助]AttachThreadInput 返回值为0,GetLastError取得的错误码为5(访问拒绝),怎么解决啊 // 获取创建前台窗口的线程DWORD dwThread = GetWindo ...
- php 获取返回值,求助 如何获取php socket 返回值
使用抓包工具可以看到,就是页面获取不到返回值,怎么办?? function Send_socket_connect($service_port, $address, $in) { header(&qu ...
- 在Linux-C中使用read函数返回值为0的问题
在Ubuntu中时使用read函数读取write函数写入到文件的数据时,发现读取到的内容为空,之后查看read函数的返回值发现也为空 经过思考后发送是在使用write函数之后,文件内部的文件指针指向文 ...
- open函数返回值为0
open函数是我们开发中经常会遇到的,这个函数是对文件设备的打开操作,这个函数会返回一个句柄fd,我们通过这个句柄fd对设备文件读写操作. 我们在对这个fd作判断的时候,经常会用到: fd = ope ...
最新文章
- CISCO2621 基本配置步骤
- 第二十五天 how can I 坚持
- 【Flink】Flink SQL 一个流 输出 2 次
- MySQL sleep函数使用详解
- php 5.0 新字符串
- Android系统的开机画面显示过程分析(2)
- 论文常用图表三:盒图 Boxplot【MATLAB】
- 软件开发职业发展路径
- java单链表中temp=temp.next的理解
- XCode下Swift – WebView IOS demo
- golang mysql 崩溃_使用GoLang与mysql连接失败
- java中如何求101-200之间的素数,并统计素数个数
- java字符串替换多个字符串_java 字符串替换函数replaceAll 一次同时替换多个字符串...
- 计算机数据恢复专业,易我数据恢复Mac版|mac专业计算机数据恢复软件
- 西门子PLC200SMART恒压供水通讯案例
- 灵活运用CSS开发技巧(转载)
- 生信学习--生物数据库大全
- 人脸识别三种经典算法总结
- ssh本机连接服务器失败
- jbd2 mysql_jbd2/dm-2-8 io太高
热门文章
- 五、菜单管理(2)---菜单页面呈现,数据添加、修改等!!!
- 技术分析| 即时通讯和实时通讯的区别
- [原创] 《老人与海》之我见
- 吴恩达 Chatgpt prompt 工程--1.Guidelines
- 河道非法采砂识别系统 yolov5
- C语言笔记--代码学习笔记--C语言语法--基本操作运算-basic-logorithm
- css 效果-uni-app 使用 float 属性实现环绕之后文字最多显示两行
- EXTJS4 动态隐藏控件
- Yolov5-5.0源码分享以及环境配置——Yolov5训练及测试教程(超详细含数据集制作,格式转换,数据集划分)
- HTTP/2 504 Gateway Timeout 36369ms