C 读取套接字中的缓冲区

C 读取套接字中的缓冲区,c,sockets,glibc,C,Sockets,Glibc,如果read()的返回值与缓冲区大小相同,如何读取其余信息?如果再次调用read,它将读取下一个数据块,还是重新从头开始读取,或者未读入缓冲区的信息将永久丢失?在TCP(SOCK_STREAM)套接字上,您将获得下一个数据块。从TCP套接字读取类似于从文件读取 在UDP(SOCK_DGRAM)数据报套接字上,如果缓冲区不足以消耗整个数据报,则会丢失其余数据报。后续读取将使用到达的下一个数据报。在TCP(SOCK\u流)套接字上,您将获得下一个数据块。从TCP套接字读取类似于从文件读取 在UDP(

如果read()的返回值与缓冲区大小相同,如何读取其余信息?如果再次调用read,它将读取下一个数据块,还是重新从头开始读取,或者未读入缓冲区的信息将永久丢失?

在TCP(SOCK_STREAM)套接字上,您将获得下一个数据块。从TCP套接字读取类似于从文件读取

在UDP(SOCK_DGRAM)数据报套接字上,如果缓冲区不足以消耗整个数据报,则会丢失其余数据报。后续读取将使用到达的下一个数据报。

在TCP(SOCK\u流)套接字上,您将获得下一个数据块。从TCP套接字读取类似于从文件读取


在UDP(SOCK_DGRAM)数据报套接字上,如果缓冲区不足以消耗整个数据报,则会丢失其余数据报。后续读取将消耗下一个到达的数据报。

正如我在回答有关TCP套接字的任何问题时所说,即使远程端点使用N字节的缓冲区调用“发送”或“写入”,也不意味着您将在端点上接收()或读取()N字节。分段、分段、带宽和延迟可能导致read()和recv()返回的字节数小于请求的字节数。准备好在读取调用上循环,直到获得继续所需的所有字节。正如我在关于TCP套接字的任何回答中所说的,即使远程端点使用N字节的缓冲区调用“发送”或“写入”,也不意味着您将在端点上recv()或read()N字节。分段、分段、带宽和延迟可能导致read()和recv()返回的字节数小于请求的字节数。准备好在read调用上循环,直到获得继续所需的所有字节。