一、问题描述

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的问题相关推荐

  1. 获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题)

    获取可视区域高度赋值给div(解决document.body.clientHeight的返回值为0的问题) 参考文章: (1)获取可视区域高度赋值给div(解决document.body.client ...

  2. fread读结构体返回值是0无错误_嵌入式C编程之错误处理(附代码例子)!

    原标题:嵌入式C编程之错误处理(附代码例子)! 作者: clover-toeic 前言 本文主要总结嵌入式系统C语言编程中,主要的错误处理方式.文中涉及的代码运行环境如下: 一.错误概念 错误分类 从 ...

  3. 程序“[4176] char.exe: 本机”已退出,返回值为 0 (0x0)

    使用VS2010运行程序,黑屏一闪而过,说程序"[4176] char.exe: 本机"已退出,返回值为 0 (0x0) 解决方法是: 在引用头文件时,加上#include &qu ...

  4. 格子玻尔兹曼方法书中,计算机代码(Fortran语言)FDM的输出结果是什么,为什么显示程序“[25024] Console1.exe”已退出,返回值为 0 (0x0)。

    格子玻尔兹曼方法书中,计算机代码(Fortran语言)FDM的输出结果是什么,为什么显示程序"[25024] Console1.exe"已退出,返回值为 0 (0x0).

  5. 程序“[3856] ConsoleApplication1.exe”已退出,返回值为 0 (0x0)

    运行代码出现:程序"[3856] ConsoleApplication1.exe"已退出,返回值为 0 (0x0) 解决方法,在主函数中 return 0 前面加入一行 getch ...

  6. 【求助】AttachThreadInput 返回值为0,GetLastError取得的错误码为5(访问拒绝),怎么解决啊

    [求助]AttachThreadInput 返回值为0,GetLastError取得的错误码为5(访问拒绝),怎么解决啊 // 获取创建前台窗口的线程DWORD dwThread = GetWindo ...

  7. php 获取返回值,求助 如何获取php socket 返回值

    使用抓包工具可以看到,就是页面获取不到返回值,怎么办?? function Send_socket_connect($service_port, $address, $in) { header(&qu ...

  8. 在Linux-C中使用read函数返回值为0的问题

    在Ubuntu中时使用read函数读取write函数写入到文件的数据时,发现读取到的内容为空,之后查看read函数的返回值发现也为空 经过思考后发送是在使用write函数之后,文件内部的文件指针指向文 ...

  9. open函数返回值为0

    open函数是我们开发中经常会遇到的,这个函数是对文件设备的打开操作,这个函数会返回一个句柄fd,我们通过这个句柄fd对设备文件读写操作. 我们在对这个fd作判断的时候,经常会用到: fd = ope ...

最新文章

  1. CISCO2621 基本配置步骤
  2. 第二十五天 how can I 坚持
  3. 【Flink】Flink SQL 一个流 输出 2 次
  4. MySQL sleep函数使用详解
  5. php 5.0 新字符串
  6. Android系统的开机画面显示过程分析(2)
  7. 论文常用图表三:盒图 Boxplot【MATLAB】
  8. 软件开发职业发展路径
  9. java单链表中temp=temp.next的理解
  10. XCode下Swift – WebView IOS demo
  11. golang mysql 崩溃_使用GoLang与mysql连接失败
  12. java中如何求101-200之间的素数,并统计素数个数
  13. java字符串替换多个字符串_java 字符串替换函数replaceAll 一次同时替换多个字符串...
  14. 计算机数据恢复专业,易我数据恢复Mac版|mac专业计算机数据恢复软件
  15. 西门子PLC200SMART恒压供水通讯案例
  16. 灵活运用CSS开发技巧(转载)
  17. 生信学习--生物数据库大全
  18. 人脸识别三种经典算法总结
  19. ssh本机连接服务器失败
  20. jbd2 mysql_jbd2/dm-2-8 io太高

热门文章

  1. 五、菜单管理(2)---菜单页面呈现,数据添加、修改等!!!
  2. 技术分析| 即时通讯和实时通讯的区别
  3. [原创] 《老人与海》之我见
  4. 吴恩达 Chatgpt prompt 工程--1.Guidelines
  5. 河道非法采砂识别系统 yolov5
  6. C语言笔记--代码学习笔记--C语言语法--基本操作运算-basic-logorithm
  7. css 效果-uni-app 使用 float 属性实现环绕之后文字最多显示两行
  8. EXTJS4 动态隐藏控件
  9. Yolov5-5.0源码分享以及环境配置——Yolov5训练及测试教程(超详细含数据集制作,格式转换,数据集划分)
  10. HTTP/2 504 Gateway Timeout 36369ms