使用fcntl设置socket为非阻塞模式,调用 read 的结果是会立刻返回-1,然后errno被设置为了11。 结论 read函数返回值: 大于0:成功读取的数据长度(Byte); 等于0:该 socket 已经关闭; 等于-1:异常发生,包括但不限于以下几种: 超时,errno=11; 连接异常关闭(RST),errno=104; 主动关闭socket后再去 read,errno=9; ...
4、如果client关闭连接,server端的select并不出错(不返回-1,使用select对唯一一个socket进行non- blocking检测),但是写该socket就会出错,用的是send.错误号:ECONNRESET.读(recv)socket并没有返回错误。 5、该错误被描述为“connection reset by peer”,即“对方复位连接”,这种情况一般发生在服务进程较客户进程提前...
而read()函数可以通过设置文件描述符的属性为非阻塞模式来实现非阻塞接收数据。 3. 返回值:recv()函数在成功接收数据时返回接收到的字节数,出错时返回-1;read()函数在成功时返回接收到的字节数,出错时返回-1。 总的来说,recv()函数更适合在socket编程中使用,而read()函数则适用于一般的文件操作。在使用这两个...
如果返回值为0,表示对方已经关闭了连接;如果返回值为-1,表示读取数据出现错误。 在使用Linux read socket时,还需要注意数据的处理和解析。因为网络传输的数据可能是二进制的,需要根据具体的协议对数据进行解析,例如按照特定的格式分割数据包,处理数据的粘包和拆包等问题。可以使用一些工具或库来简化数据的处理,例如使用...
对于读取操作,read函数是主要实现方式,其函数原型为:Ssize_t read(int fd, void *buf, size_t nbyte)。此函数用于从文件描述符对应的文件或socket中读取内容。如果读取成功,read函数将返回实际读取到的字节数;如果返回值为0,表示已经到达文件结束;如果返回值小于0,则表示读取过程中发生了错误。
read一个收到RST的socket会返回0? nightwatch 26094856 发布于 2018-01-16 研究muduo网络库,发现它在收到RST的包时触发可读事件,然后读的时候返回了0,然后关闭TCP连接。 但是读一个收到RST的socket不是应该返回-1,并且设置errno为ECONNRESET 20180115 12:57:41.647071Z 7171 TRACE printActiveChannels {8: IN ...
考虑read API 函数,它从文件读取一定数量的字节。read 函数返回读取的字节数(最高为您指定的最大值);或者 -1,表示错误;或者 0,如果已经到达文件末尾。 如果在一个套接字上完成一个 read 操作并得到一个为 0 的返回值,这表明远程套接字端的对等层调用了 close API 方法。该指示与文件读取相同 —— 没有多...
表示某种阻塞的操作,被接收到的信号中断,造成的一种错误返回值。 EAGAIN 从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,以 O_NONBLOCK的标志打开文件/socket/FIFO,如果你连续做read操作而没有数据可读。此时程序不会阻塞起来等待数据准备就...