对方关闭了连接:当对方关闭了连接,Socket就会收到EOF信号,read()方法返回0。 没有数据可读:在Socket读取数据时,如果没有数据可读,也会返回0。 数据传输完成:有时候在传输大量数据时,read()方法可能会返回0表示数据传输完成。 处理Java Socket Read 返回0 当Socket的read()方法返回0时,我们需要适当地处理这种情况,...
当client,调用read(socketfd,buffer,n)时,返回0的情况: 1、server端调用了close(soketfd)函数 2、server调用了close(fd,SHUT_WR),关闭server端的写连接,半关闭 关于close 和shutdown的过程 一.void close(fd):close发送的是FIN分节(不一定是发送FIN,也可能发送RST(如果local接受缓冲区的数据没有被读完);sever...
采用非阻塞的socket 返回值>0, 表示从缓存读取的字节数目 返回值=0, 表示对端关闭socket 返回值=-1, 看errno。 如果errno==EINTR,表示系统当前中断,直接忽略。 如果errno==EAGAIN, 表示接收缓存区没有数据,非阻塞的socket则直接忽略。发布于 2019-04-02 01:00 ...
最近在测试一个网络程序的时候,每次调用read函数返回立即返回0,read是阻塞函数,没有读到数据竟然立即返回0,有些奇怪。想了一下,和tcp的四次挥手有关,看代码。 服务端: #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h...
read返回-1说明客户端的数据发送完毕,并且主动的close socket。所以在这种场景下,(服务器程序)你需要关闭socketChannel并且取消key,最好是退出当前函数。注意,这个时候服务端要是继续使用该socketChannel进行读操作的话,就会抛出“远程主机强迫关闭一个现有的连接”的IO异常。
当read方法返回0,即我们收到了对方发给我们的fin包,使我们的socket处于RCV_SHUTDOWN状态,此后,该socket还会有epollin事件发生吗? 同理,我们调用shutdown方法,关闭了send端,使我们的socket处于SEND_SHUTDOWN状态,此后,还会有epollout事件吗? 其实,对认真读过之前几篇文章的同学来说,这个问题已经很简单了,答案就是会...
read返回-1说明客户端的数据发送完毕,并且主动的close socket。所以在这种场景下,(服务器程序)你需要关闭socketChannel并且取消key,最好是退出当前函数。注意,这个时候服务端要是继续使用该socketChannel进行读操作的话,就会抛出“远程主机强迫关闭一个现有的连接”的IO异常。
在socket中服务器与客户端进行通信,当其中一方调用close(即这一方会发送一个fin)关闭套接字之后,另...
read一个收到RST的socket会返回0? nightwatch 26084856 发布于 2018-01-16 研究muduo网络库,发现它在收到RST的包时触发可读事件,然后读的时候返回了0,然后关闭TCP连接。 但是读一个收到RST的socket不是应该返回-1,并且设置errno为ECONNRESET 20180115 12:57:41.647071Z 7171 TRACE printActiveChannels {8: IN ...
用socket机制使用系统调用ret=read(sock,buf,1000);从对方TCP接收数据,如果ret返回值为0,说明当前TCP的接收缓冲区为空,暂时没有到达的数据。相关知识点: 试题来源: 解析 答:错误。这里read返回0说明对方的TCP关闭了连接。如果当前TCP的接收缓冲区为空,暂时没有到达的数据,unix会让执行read的进程进入“阻塞”状态...