[笔记]socket recv()函数返回0的一种情况

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

假设使用Socket基于TCP通信协议进行C/S通信编程,客服端已经成功与服务端建立tcp连接,并且可以正常进行收发数据。

当一段时间后,服务端的程序如果调用closesocket(sClient);WSACleanup();函数关闭socket, 

那么客户端的recv()将会返回0;

如果服务端没有调用closesocket(sClient);而只调用WSACleanup();或直接关闭程序,

那么客户端的recv()将会返回-1(SOCKET_ERROR)。

以上结果在局域网经过实际验证。

Socket的基本操作函数socket()、bind()、listen()、connect()、accept()recv()、send()、select()、close() 文章目录Socket的基本操作函数1、socket()函数1.1、 命名socket网络字节序与主机字节序:2、bind()函数3、listen()、connect()函数4、accept()函数5、recv()、send()函数同步Socket的send函数的执行流程注意:同步Socketrecv函数的执行流程注意:6、select()函数理解select模型:select模型的特点:7、close()/shutdown()函数注:多进程中close操作解释close与shutdown的区别 Soc 阅读详情

相关推荐

socket编程:recv/send 和 recv/recvfrom返回值及处理

1、recvrecvfrom =0返回值为0时,表示对端已经关闭了这个链接,我们应该自己关闭这个链接,即close(sockfd)。另外因为异步操作会用select或epoll做事件触发,所以: 1、如果使用select,应该使用FD_CLR(sockfd,fd_set)将sockfd清除掉,不再监听。 2、如果使用epoll,系统会自己将 ...

1万+

Linux网络编程:recv返回

recv是网络编程中用于TCP传输接收数据的接口,由于工作中一直没有接触到网络编程,虽然知道这个函数,但是没有使用经验,所有对接口细节不是很了解。 直到前阵子在项目中调试第三方的源码时,跟踪到这个函数,才发现它的返回值和我想象的不太一样。 recv函数的原型: ssize_t recv(int sockfd, void* buf, size_t len, int flags); 之前知道的是如果读取成功,会返回实际读取到的字节数,但是如果读取不到数据呢?一直想当然的认为会返回0,其实并不是,当读取不到数据

澎湖Java架构师的博客 4574

【C语言】socket编程接收问题

为客户端和服务端实现标准的健康检查API。这些API可以返回简单的状态码或更复杂的健康信息,以便监控服务可以理解被监控服务的状态。

数字人生 2388

C++编程socket编程用recv函数接收,返回值为0解决方案

        先讲下背景,我需要写一个客户端,用winsock发送请求到服务器,服务器用tomcat写的,通过responseBody返回字符串作为发还给客户端的数据。 错误表现为:         在用Visual Studio2017调试的时候,在Debug模式下,是没有任何问题的,而在Release模式下,则报错。         错误代码如下: char buffer[...

code_while的博客 2万+

recv函数返回值处理(包括errno的处理)

1、recev()函数返回值: >0:接收到的数据大小; =0:连接关闭; <0:出错。 在出错的情况下, 这三种错误下认为连接是正常的,继续接收 if(errno == EINTR ||(errno == EAGAIN)||errno == EWOULDBLOCK) continue; if(FD_ISSET(connfd,......

modi000的博客 9724

Socket网络编程】17. recv() 函数详解

recv函数 int recv( SOCKET s, char *buf, int len, int flags); 参数说明 第一个参数指定接收端套接字描述符; 第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据; 第三个参数指明buf的长度;第四个参数一般置0。 同步Socketrecv函数的执行流程 当应用程序调用recv函数时: recv先等待 SOCKE...

u011754972的博客 3万+

recv( )函数返回值说明

recv函数 int recv( SOCKET s, char FAR *buf, int len, int flags); 参数说明 第一个参数指定接收端套接字描述符;  第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据;  第三个参数指明buf的长度; 第四个参数一般置0。 同步Socketrecv函数的执行流程 当应用程序调用recv函数时: rec...

mercy_ps的博客 3万+

深入理解socket中的recv函数和send函数

一、函数原型 **·**recv函数用于socket通信中接收消息,接口定义如下: ssize_t recv(int socket, void *buf, size_t len, int flags) 参数一:指定接收端套接字描述符; 参数二:指向一个缓冲区,该缓冲区用来存放recv函数接收到的数据; 参数三:指明buf的长度; 参数四:一般置为0返回值:失败时,返回值小于0;超时或对端主动关闭,返回值等于0;成功时,返回值是返回接收数据的长度。 **·**send函数用于socket通信中发送消息,

Janway-Win 1万+

盘点python socketrecv函数的坑

1. 首先来看一下recv函数的各个参数 函数原型:int recv( SOCKET s, char *buf, int len, int flags) 功能:不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据。 参数一:指定接收端套接字描述符; 参数二:指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据; 参数三:指明buf的长度; 参数四 :一般置为0...

UN_spoken的博客 4万+

socket编程 recv()返回值处理

转自https://blog.csdn.net/flying881114/article/details/4850666 一般在经典的socket教程中,调用send()recv()时都会判断一下返回值,如果返回值是-1(或者SOCKET_ERROR),那么就进行错误处理(一般是打印出错信息,关闭socket,退出)。在我的一个项目中我因为嫌麻烦就想当然没有判断send和recv返回值,结果遇...

风再起时的博客 2万+

socket编程:recv()函数详解

文章目录1. 函数原型2. 函数使用3. 参数详解4. 返回值 官方文档:https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-recv 1. 函数原型 recv函数从连接的套接字或绑定的无连接套接字接收数据。 int WSAAPI recv( SOCKET s,//标识已连接套接字的描述符。 char *buf,//指向缓冲区的指针,以接收传入的数据。 int len,//buf参数指向的缓冲区

超级大洋葱的博客 6万+

Socket中send()函数recv()函数详解

目录1、send函数2、recv函数关于socket的send和recv的超时设置 1、send函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。 客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。 (1)第一个参数指定发送端套接字描述符; (2)第二个参数指明一个存放应用程序要发送数据的缓冲区; (3)第三

wu_zhiyuan的博客 1万+

socket recv()函数返回0一种情况

假设使用Socket基于TCP通信协议进行C/S通信编程,客服端已经成功与服务端建立tcp连接,并且可以正常进行收发数据。 当一段时间后,服务端的程序如果调用closesocket(sClient);WSACleanup();函数关闭socket,  那么客户端的recv()将会返回0; 如果服务端没有调用closesocket(sClient);而只调用WSACleanup()

Acettest's Blogs 1万+

recv函数返回值总结

函数原型:int recv( SOCKET s, char *buf, int len, int flags) 功能:不论是客户还是服务器应用程序都用recv函数从TCP连接的另一端接收数据。 参数一:指定接收端套接字描述符; 参数二:指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据; 参数三:指明buf的长度; 参数四 :一般置为0

h a 6 6 6 c k 为 你解决复杂难题! 1万+

Socket网络编程】recv()与send()返回

1、intrecv(SOCKETs, char *buf, intlen, intflags); 0recv会先等待套接字s的发送缓冲中的数据被协议传送完毕,如果协议在传送s的发送缓冲中的数据时出现网络错误,那么recv函数返回SOCKET_ERROR(= -1); 如果s的发送缓冲区中没有数据或者数据被协议成功发送完毕后,recv再检查套接字s的接收缓冲区,如果s接收缓冲...

Beast_Liu的博客 3779

send()recv()函数详解(send返回值举例)

转载:send()recv()函数详解_weixin_34281537的博客-CSDN博客 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。 该函数的参数:这里只描述同步Socket的send函数的执行流程。当调用该函数时:(1) send先比较待发送数据的长度len和套接字s的发送缓冲区的长度,如果len大于s的发送缓冲区的长度,该函数返回 SOCKET_ERROR;(2) 如果

modi000的博客 5440

socket编程中的recv函数和send函数

1、recv()函数 recv()函数用于socket通信中接收消息 #include <sys/types.h> #include<sys/socket.h> ssize_t recv(int sockfd, void *buff,size_t nbytes,int flags); sockfd:文件描述符; buff:指向一个缓冲区,用来存放接收的数据 ...

modi000的博客 2522

Windows网络编程之recv()函数

一、作用与原理 得到指定客户端(参数1)发来的消息 原理(本质):复制,数据的接收都是由协议本身做的,也就是socket的底层做的,系统会有一段缓冲区,存储着接收到的数据。外面调用recv的作用,就是通过socket找到这个缓冲区,并把数据复制进参数2,复制参数3个 二、句法 int recv( SOCKET s, char *buf, int len, int f...

天天看天天的博客 4433

linux socket send函数recv函数详解以及修改缓冲区大小

一、send/recv详解 1.send 函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。 该函数的第一个参数指定发送端套接字描述符; 第二个参数指明一个存放应用程序要发送数据的缓冲区; 第三个参数指明实际要发送的数据的字节数; 第四个参数一般置0

lgfun的专栏 7761
上一篇: 今天你为自己贴上什么样的标签,或许就决定了明天你是否会被委以重任
下一篇: ADO连接数据库出现“无效指针”错误码80004003
zdleek
博客等级 码龄25年 98粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值