首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

(recv() == 0)表示断开连接还是超时?(套接字、Linux和Windows)

(recv() == 0) 表示断开连接。

在套接字编程中,recv() 函数用于接收数据。当 recv() 函数返回值为 0 时,表示连接已经断开。这通常发生在对方主动关闭连接或者网络异常导致连接中断的情况下。

在 Linux 和 Windows 系统中,recv() 函数的返回值为 0 表示连接已断开。这是因为在 TCP 协议中,当一方关闭连接时,另一方的 recv() 函数会返回 0,表示没有接收到数据。

对于 Linux 系统,可以参考以下链接了解更多关于套接字编程的信息:

对于 Windows 系统,可以参考以下链接了解更多关于套接字编程的信息:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

socket编程进阶

),其中conn是新的套接对象,可以用来接收发送数据,address是连接客户端的地址 接收TCP客户端的连接(阻塞)等待连接的到来 sk.connect(address) 连接到address处的套接...,连接成功时返回0连接失败时返回编码 sk.close() 关闭套接 sk.recv(bufsize[,flag]) 接收套接的数据,数据以字符串形式返回,bufsize指定最多可以接收的数量,flag...是发送数据的套接地址 sock.send(string[,flag]) 将string中的数据发送到连接套接,返回值是要发送的字节数量,该数量可能小于string的字节大小,即:可能未将指定内容全部发送...sk.settimeout(timeout) 设置套接操作的超时期,timeout是一个浮点数,但是为秒 值为None表示没有超时期,一般超时期应该在刚创建套接时设置,因为他们可能用于连接的操作 sk.getpeername...() 返回连接套接的远程地址。

1.7K80

TCP通信

关闭链接 可靠传输 应答机制ACK 超时重传 错误校验,奇偶校验(00010110最后一个“0”前面每一位看看加起来是不是原 先的奇数或偶数) 拥塞控制 根据实时情况调整发送速度 *基于字节流 最小单位是字节...) 链接 套接对象.connect((服务器IP,端口)) IP与端口是一个元组,记得写括号 接收 bytes类型数据 = 套接对象.recv(本次接收的最大长度) 如果接受的是来自Windows...转接到分机 - 接受连接 accept 接受连接 # (客户端关联起来的套接对象, 客户端套接地址('192.168.33.110', 46080)) client_socket...,称为全连接 未完成三次握手的连接,称为半连接 listen可以实现将半连接连接分成两类,分别存放在不同的空间 listen(128)作用 1 主动 -> 监听 2 参数含义,Linux表示已就绪队列长度...建立连接 2.9 了解TCP的4次挥手 FIN表示完成 除非双方都断开才能完成断开链接,只有一端断开是完不成的 主动端被动端 意义:忽略2MSL时间(进行补充) 目的:解决前面历史遗留问题

1.1K20

recv函数说明返回值

客户端的程序连接上服务器后recv函数阻塞接受,有时会返回0,说明接收超时服务器主动断开连接,需要重新connect服务器,但重新connect时会报“Transport endpoint is already...是否要在 recv之前,判定连接是否中断,如果未中断则recv.  恩。我最后查了一下,是因为服务端关闭了套接,才导致这边recv返回0。...该函数的第一个参数指定接收端套接描述符;  第二个参数指明一个缓冲区,该缓冲区用来存放recv函数接收到的数据;  第三个参数指明buf的长度; 第四个参数一般置0。...失败返回-1, errno被设为以下的某个值  EAGAIN:套接已标记为非阻塞,而接收操作被阻塞或者接收超时  EBADF:sock不是有效的描述词  ECONNREFUSE:远程主机阻绝网络连接...:sock索引的不是套接 当返回值是0时,为正常关闭连接; 思考: 当对侧没有send,即本侧的套接s的接收缓冲区无数据,返回值是什么(EAGAIN,原因为超时,待测) http://hi.baidu.com

4.8K10

【socket笔记】TCP、UDP通信总结

TCP断开(四次挥手) TCP断开连接时,客户端、服务端要完成四次数据交互工作才能建立连接,常称为四次挥手。可形象比喻为如下对话: 客户端:服务端您好,我发送数据完毕了,即将和您断开连接。...为什么建立连接只需要三次数据交互,而断开连接需要四次呢? 建立连接时,服务端在监听状态下,收到建立连接请求的SYN报文后,把ACKSYN放在一个报文里发送给客户端。...(2)Linux的程序: 在linux下,“一切都是文件”,所以这里我们的套接也当做文件来看待。...(ClientFd); // 关闭套接 } return 0; } Linux下编译就不需要添加-lwsock32参数: gcc linux_tcp_server.c -o linux_tcp_server...重点介绍了TCP、UDP通信的一些原理及其API接口的用法,并给出了windowslinux下的TCP、UDP通信实例。以上就是关于socket编程的一些总结,如有错误,欢迎指出!

3.6K22

服务器开发中网络数据分析与故障排查经验漫谈

2 默认使用的socket函数创建的套接是阻塞模式的,可以调用相关接口函数将其设置为非阻塞模式(Windows平台可以使用ioctlsocket函数,linux平台可以使用fcntl函数,具体设置方法可以参考这里...阻塞模式非阻塞模式的套接,对服务器的连接服务器网络数据的收发行为影响很大。...sendrecv函数的超时时间可以参考下文关于常用socket选项的介绍。...默认为0表示关闭。 u net.ipv4.tcp_tw_reuse=1 表示开启重用。允许将TIME-WAIT套接重新用于新的TCP连接。默认为0表示关闭。...u net.ipv4.tcp_tw_recycle=1 表示开启TCP连接中TIME-WAIT套接的快速回收。默认为0表示关闭。

1.4K50

Python基础21-网络编程

5)堡垒机,连接LinuxWindows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。...于是乎经历过四次挥手之后,就断开连接了,但是要记住,不是立马就断开连接,因为你是个渣男,所以你要付出代价,这个后果就是持续4分钟的time_wait状态,不能释放套接资源(端口),这段时间内套接资源...或者A、B重启、关机、手动执行断开连接的操作时,OSI会话层也会将A、B之间的会话断开。 ---- 表示表示层主要三大功能: 1.内码转换 2.压缩与解压缩 3.加密与解密。...关闭套接 面向锁的套接方法 s.setblocking() 设置套接的阻塞与非阻塞模式 s.settimeout() 设置阻塞套接操作的超时时间 s.gettimeout...() 得到阻塞套接操作的超时时间 面向文件的套接的函数 s.fileno() 套接的文件描述符 s.makefile() 创建一个与该套接相关的文件

49820

python socket编程

),其中conn是新的套接对象,可以用来发送接收数据,address是链接客户端的地址  客户端Socket函数 s.connect(address):链接到address处的套接,一般address...s.getsockopt(level, optname[, buflen]):返回套接选项的值 s.settimeout(timeout):设置套接操作的超时时间,timeout是一个浮点数,单位是秒...,值为None则表示永远不会超时。...一般超时期应在刚创建套接时设置,因为他们可能用于连接的操作,如s.connect() s.gettimeout():返回当前超时值,单位是秒,如果没有设置超时则返回None s.fileno():返回套接的文件描述...s.setblocking(flag):如果flag为0,则将套接设置为非阻塞模式,否则将套接设置为阻塞模式(默认值)。

1.2K111

网络编程,来了!

4、查看IP地址 Linuxmac OS使用ifconfig命令 Windows使用ipconfig命令 5、检查网络是否正常 检查网络是否正常使用ping命令 说明: ping www.baidu.com...方法说明: connect((host,port))表示和服务端套接建立连接,host是服务器ip地址,port是应用程序的端口号 send(data)表示发送数据,data是二进制数据 recv(...后的套接字意味着服务端的套接关闭了,会导致新的客户端不能连接服务端,但是之前已经连接成功的客户端还能正常通信 当客户端的套接字调用close后,服务器端的recv会解阻塞,返回的数据长度为0,服务端可以通过返回数据的长度来判断客户端是否已经下线...,反之服务端关闭套接,客户端的recv也会解阻塞,返回的数据长度也为0 案例 - 多任务版TCP服务端程序开发 1、需求 目前我们开发的TCP服务端程序只能服务于一个客户端,如何开发一个多任务的TCP...4、sendrecv原理剖析图 说明: 发送数据是发送到发送缓冲区 接收数据是从接收缓冲区获取 5、小结 不管是recv还是send都不是直接收到对方的数据发送数据到对方,发送数据会写入到发送缓冲区

34230

linux内核 recvfrom,Linux系统调用– recvrecvfrom 函数详解

Linux系统调用– recv/recvfrom函数详解 功能描述: 从套接上接收一个消息。对于recvfrom,可同时应用于面向连接连接套接。...recv一般只用在面向连接套接,几乎等同于recvfrom,只要将recvfrom的第五个参数设置NULL。 如果消息太大,无法完整存放在所提供的缓冲区,根据不同的套接,多余的字节会丢弃。...fromlen:作为入口参数,指向存放表示from最大容量的内存单元。作为出口参数,指向存放表示from实际长度的内存单元。 返回说明: 成功执行时,返回接收到的字节数。另一端已关闭则返回0。...失败返回-1,errno被设为以下的某个值 EAGAIN:套接已标记为非阻塞,而接收操作被阻塞或者接收超时 EBADF:sock不是有效的描述词 ECONNREFUSE:远程主机阻绝网络连接 EFAULT...:内存空间访问出错 EINTR:操作被信号中断 EINVAL:参数无效 ENOMEM:内存不足 ENOTCONN:与面向连接关联的套接尚未被连接上 ENOTSOCK:sock索引的不是套接 发布者:

2.7K10

(六)关于网络编程的一些实用技巧细节

本文涉及的平台包括windowslinux,下面开始啦。...,除了用setsocketopt函数设置sendrecv超时时间以外,还可以自定义整个收发数据过程中的超时时间,思路是开始收数据前记录下时间,收取完毕后记录下时间,如果这个时间差大于超时时间,则认为超时...还是windows,这个函数都源于Berkeley 套接。...在linux下,第一个参数必须设置成这三个参数中,所有socket描述符句柄中的最大值加1;windows虽然不使用这个参数,却为了保持与Berkeley 套接兼容,保留了这个参数,所以windows...但是windowslinux上实现稍有差别,windows上是一个socket回收后,在MSL期间内,其使用的地址端口号组合其他进程不可以使用,但本进程可以继续重复利用;而linux实现是所有进程在

1.9K51

套接连接状态检测

主动断开连接 主动断开连接会发送,关闭事件 connec函数检测连接状态,getlasterror send发送(tcp keeplive心跳包或者有数据时检测),recv接收判断异常(无数据判断异常)...linux中的 select(socket用户内核传递数组,大小有限制) poll(同select大小无限制,链表维护) epoll(内核态数据) 拔网线 拔网线后,关闭事件不能传递,连接状态不好检测...设置连接或者发送超时,同步套接超时设置 // platform-specific switch #if defined _WIN32 || defined WIN32 || defined OS_WIN64...|| defined _WIN64 || defined WIN64 || defined WINNT // use windows-specific time int32_t timeout...windows的结构不同 linux int keepalive = 1; // 开启keepalive属性 int keepidle = 60; // 如该连接在60秒内没有任何数据往来,则进行探测

93840

(六)关于网络编程的一些实用技巧细节

本文涉及的平台包括windowslinux,下面开始啦。...那么如何利用connect()函数编写非阻塞的连接代码呢? 无论在windows还是linux平台都可以采取以下思路来实现: 1....,除了用setsocketopt函数设置sendrecv超时时间以外,还可以自定义整个收发数据过程中的超时时间,思路是开始收数据前记录下时间,收取完毕后记录下时间,如果这个时间差大于超时时间,则认为超时...还是windows,这个函数都源于Berkeley 套接。...在linux下,第一个参数必须设置成这三个参数中,所有socket描述符句柄中的最大值加1;windows虽然不使用这个参数,却为了保持与Berkeley 套接兼容,保留了这个参数,所以windows

1.1K70

python网络编程

s.settimeout(timeout) 设置套接操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。...一般,超时期应该在刚创建套接时设置,因为它们可能用于连接的操作(如connect()) s.gettimeout() 返回当前超时期的值,单位是秒,如果没有设置超时期,则返回None。...s.fileno() 返回套接的文件描述符。 s.setblocking(flag) 如果flag为0,则将套接设为非阻塞模式,否则将套接设为阻塞模式(默认值)。...所谓的阻塞,指的是程序会暂停在那,一直等到有数据过来,用 s.setblocking(flag) 可以改变阻塞模式 不能够发送空白的消息过去,否则服务器会以为客户端已经断开连接,然后服务器客户端都卡死在那里...,连接服务器地址:socket.socket() , s.connect() 连接后发送数据接收数据:s.sendall(), s.recv() 传输完毕后,关闭套接:s.close() server

51820

c++ 网络编程(四)TCPIP LINUXwindows下 socket 基于IO复用的服务器端代码 解决多进程服务端创建进程资源浪费问题

表示秒数tv_usec表示毫秒数。...3.传入的timeout为一个大于0的值,则表示这个值为select()函数的超时时间,在timeout时间内一直阻塞,超过时间即返回结果。...返回0表示select()函数超时。 返回正数:返回的正数值表示已经准备好的描述符数。...注意与一般服务器的区别,一般服务器是连接请求先进入请求队列里,然后,服务端套接一个个有序去受理。而I/O复用服务器是事件监听,只要对应监听事件发生就会响应,是属于并发服务器的一种。...cpy_reads = reads; timeout.tv_sec = 5; timeout.tv_usec = 5000; //监听服务端套接与客服端连接的服务端套接

1.5K60

linux recv返回值,recv recvfrom

recvrecvfrom都是用来接受来自的网络的数据。...因为还是有点小区别,linux下面是int类型,而windows下面是unsigned int。...都可以 接受面向连接的流式套接的  接受无连接的数据报套接 的数据 3....在成功接受到数据后,返回值都是实际接受的字节数; 套接关闭时,返回都为0; 接受出错时,windows下面都返回SOCKET_ERROR , linux下面都返回-1, 其实你要是感兴趣可以查看SOCKET_ERROR...定义,它的值也是-1; 关于这里的“套接关闭”需要注意,2个函数在用在流式套接和数据报套接时,套接表示的含义不一样,前者表示客户端套接,而后者表示的是自己的套接

2.7K20

python反向shell

这就让c_socket也成为一个套接对象,并且地址还是目标的 #第二个元素也是一个元组,包含P端口,简单来说他会返回一个新的套接 c_socket,addr = s_socket.accept...,而断开在重连他会带有一些原本的标识,而新的连接已经发生了改变,所以无法找到,于是陷入死循环,一直无法连接,于是就把初始化套接放在大循环里,连接成功部分是在小循环进行的,如果断开后,就重新初始化套接...#第一个元素刚好就是一个套接的设置部分,这就让c_socket也成为一个套接对象,并且地址还是目标的 #第二个元素也是一个元组,包含IP端口,将他们分别给不同的变量 c_socket...,我们将第一个元素给c_socket #第一个元素刚好就是一个套接的设置部分,这就让c_socket也成为一个套接对象,并且地址还是目标的 #第二个元素也是一个元组,包含IP端口,...c_socket #第一个元素刚好就是一个套接的设置部分,这就让c_socket也成为一个套接对象,并且地址还是目标的 #第二个元素也是一个元组,包含P端口 c_socket

67190
领券