首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    socket读写返回值的处理

    在调用socket读写函数read(),write()时,都会有返回值。...如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲区读取或者写入的字节数目 2当read()函数返回值为0时,表示对端已经关闭了...netstat命令查看下,如果有closewait状态的socket,就是socket泄露了 当write()函数返回0时,表示当前写缓冲区已满,是正常情况,下次再来写就行了。...不然返回了-1,你也不知道是socket连接是真的断开了,还是正常的网络抖动。一般情况下,阻塞的socket返回了-1,都需要关闭重新连接。...如果err值为0,则表示connect成功;否则也应该关闭重连 5 在使用epoll时,有ET与LT两种模式。ET模式下,socket需要read或者write到返回-1为止。

    3.3K50

    socket函数发送接收返回值处理

    深信服面试问到的问题 read 函数返回值: 大于0:成功读取的数据长度(Byte); 等于0:该 socket 已经关闭; 等于-1:异常发生,包括但不限于以下几种: 超时,errno=11;...连接异常关闭(RST),errno=104; 主动关闭socket后再去 read,errno=9; 非阻塞模式下的没有数据时,errno=11。...write 函数返回值: 大于0:成功写入的数据长度(Byte); 等于0:写入长度为0; 小于0:异常发生,包括但不限于以下几种: 主动关闭再写数据,errno=9; 连接异常关闭(RST)之后再写数据...send 函数返回值 大于0: 成功写入的数据长度(Byte); 等于0: 对端关闭连接; 等于-1: tcp窗口太小,数据暂时发不出去,也就是缓冲区满了,errno=EWOULDBLOCK或EAGIN...被信号中断,需要重试,errno=EINTR 出错 recv 函数返回值 大于0: 成功接收的数据长度(Byte); 等于0: 对端关闭连接; 等于-1: 再当前缓冲区无可读数据,errno=EWOULDBLOCK

    1.9K10

    C语言函数返回 1 和返回 0 哪个好?

    按照C语言语法, 0 表示假,非零(常常用 1)表示真,那是否函数也用 0 返回值表示“失败”,1 返回值表示“成功”呢?...02 行业“潜规则” C语言函数当然可以使用返回0 表示“失败”,用返回值 1 表示“成功”。...C语言也有“行业潜规则”,不过,对于一般的函数,大多数C语言程序员常常使用返回0 表示成功,非零值表示失败。...仔细考虑下,其实C语言函数使用返回0 表示成功是有原因的。更一般的C语言函数返回值并不一定只有两种可能值(成功/失败),它可能还会返回对应错误原因的返回值。...实数要么是 0,要么非 0,因此可以将 0 看作一个比较特殊的“唯一”数值,使用 0 这个“唯一”的返回值,表示唯一的“成功”,多种非零的返回值,表示多种原因的失败,无疑更好一些。

    2.5K20

    linuxsocket编程

    利用socket()函数打开,返回一个整型的socket描述符,然后建立连接,数据传输等等。...0,出错返回-1并将errno设置为响应的错误号 建立连接     面向连接的客户程式使用connet函数来配置socket并和远端服务器建立一个TCP连接  int connect(int sockfd...        addrlen: 为远端地址结构的长度, sizeof(sockaddr)     connect函数只用于面向连接的客户端程式,无连接和面向连接的服务器不需要,成功则返回0,失败返回...flags:一般设置为0     返回实际上发送出的字节数,可能会少于希望发送的数据;在程序中应该将send发送的数据和len进行比较,若不匹配时,应该进行处理 char *msg = "hello...描述符     buf:为存放接受数据的缓冲区     len:缓冲区的长度     flags:一般也被设置为0     返回实际接受的数据字节数 面向无连接的数据socket以sendto

    4K70

    Linux Socket 收发Json

    如果对你有帮助,麻烦点个在看或点个赞,感谢~ 不管是Qt开发还是linux 嵌入式应用开发,一个人的核心竞争力还是不断思考,也就是不断琢磨。...下面的程序主要是Linux C Socket 读取JSON文件并传输,然后再写入文件,其中使用了cJSON库,关于cJSON库不过多介绍,主要介绍整体的思路。 1....,将socket通信独立出来,JSON解析、写文件、响应客户端JSON数据等分别写成函数。...int sockfd = socket(AF_INET,SOCK_STREAM,0); // 定义sockaddr_in struct sockaddr_in skaddr; skaddr.sin_family...小结 编译JSON时需要链接linux的数学库 自己琢磨如何拆解函数功能 应用程序也主要是调用别人的api,那么你的核心竞争力是什么呢 ? 如需程序工程可在公众号后台留言。

    4.7K20

    C语言函数返回1和返回0区别?

    按照C语言语法, 0 表示假,非零(常常用 1)表示真,那是否函数也用 0 返回值表示“失败”,1 返回值表示“成功”呢?...“行业潜规则” C语言函数当然可以使用返回0 表示“失败”,用返回值 1 表示“成功”。...C语言也有“行业潜规则” 不过,对于一般的函数,大多数C语言程序员常常使用返回0 表示成功,非零值表示失败。...仔细考虑下,其实C语言函数使用返回0 表示成功是有原因的。...函数成功只有一种可能,函数失败却有多种可能 实数要么是 0,要么非 0,因此可以将 0 看作一个比较特殊的“唯一”数值,使用 0 这个“唯一”的返回值,表示唯一的“成功”,多种非零的返回值,表示多种原因的失败

    5.3K2119

    关于socket通信bind()返回值错误:10049

    前几天偶尔收到一个朋友的求救,要编写一个IPV6的socket编程 开始以为这个问题很容易,因为socket已经兼容IPV4和IPV6的,改下那几个接口就可以了 然后….被卡住了…....但是我服务器端bind监听的socket的时候,是不应该出这个问题的… 遍历无果,只能通过检视代码来找可能的错误....in6addr_any; //inet_pton(AF_INET6,DEFAULT_IP,&addr.sin6_addr); addr.sin6_port=htons(8000); int ret=0;...int error=0; ret=bind(m_hSocket,(struct sockaddr *)&addr,sizeof(struct sockaddr_in6));//绑定 if(ret...sockaddr_in6 结构体的时候没有初始化… 因此加了一句 memset(&addr, 0, sizeof(addr)); 重新试了下,bind成功… 这个事情告诉我们,一定要遵守编程规范….

    3.2K20

    Linux系统下socket编程socket接口介绍(二)

    前言 在上一篇文章里面我们介绍了TCP的三次握手和四次挥手过程的介绍以及网络编程里面的一些api接口函数的介绍——Linux系统下socket编程之socket接口介绍(一)。...函数介绍 - 发送和接收 - (1)send和write: 首先说明的一点,之前介绍的socket这个函数,非常类似我们之前介绍的open函数,他们都会返回一下文件描述符;所以这里的send函数和write...sockfd, const void *buf, size_t len, int flags); 说明: 第一个参数sockfd就是socket函数返回的文件描述符;第二个参数指向发送的信息所在的缓冲区...0表示cp主机有地有效,返回0表示主机地址无效。...For example, the loopback address 0:0:0:0:0:0:0:1 can be abbreviated as ::1.

    3.7K20

    open函数返回值为0

    返回值: 调用成功时返回一个文件描述符fd 调用失败时返回-1,并修改errno 正确的判断应该是 if(fd < 0),那我们什么时候会fd=0呢,如果fd=0,那么已经正常打开了,但是我们判断了打开错误了...open函数返回的文件描述符fd一定是未使用的最小的文件描述符,那么如果0没有使用,那么我们open的时候,首先就会获取到fd=0的情况。...默认情况下,0,1,2这三个句柄对应的是标准输入,标准输出,标准错误,系统进程默认会打开0,1,2这三个文件描述符,而且指向了键盘和显示器的设备文件。...所以通常我们open的返回值是从3开始的。...; printf(“fd = %d\n”, fd); 则可以发现我们就可以open的时候,返回0的fd.

    2.7K20

    linux udp编程_linuxsocket编程

    在前面的文件中,我们介绍了linux网络编程中与IP相关的知识和常用的函数总结,本文针对具体的UDP通信,来详细的介绍UDP通信的使用,包括UDP通信中的点对点通信,多播,广播等。..., msg, msg_len, 0, (struct sockaddr *)&addr, &addr_size); 粗看上面的代码并没有什么问题,正常的理解就是addr中存在发送者的IP信息,addr_size..., msg, msg_len, 0, (struct sockaddr *)&addr, &addr_size); 这样我们才能正确的获取到IP信息。...optname, const void *optval, socklen_t optlen); 常见组播设置选项如下: 其中: 选项IP_MULTICASE_TTL:设置超时时间,其值optval的设置范围为0-...(int)); if (ret < 0) { perror("socket set SO_REUSEADDR failed"); } 2、服务端程序,在创建完socket后,有一个bind的操作

    11K10

    Socket 非阻塞模式下connect 返回EINPROGRESS(115)错误

    今天再测试socket的时候,发现一个很奇怪的问题,就是客户端再connect的时候第一次connect总是会返回-1,errno是115,往往第二次连接就可以成功了。...但是对于服务端来说,第一次连接已经成功返回了。后来想想可能跟自己的设置socket是非阻塞的有关系,后来吧socket设置成阻塞的,问题确实就没有了。 后来有反复尝试了非阻塞的。...两种方案 1)先设置socket为阻塞,待connect连接成功后改成非阻塞 2)connect返回115时,需要判断socket是否可写,如果时可写的话则连接成功 通过select 或者poll判断可写...https://blog.csdn.net/saspss/article/details/8487678 3)个人实验,第一次connect返回EINPROGRESS可再次connect,如果没问题就证明成功

    1.7K20
    领券