使用读写系统调用时,套接字中的数据会发生什么变化?

时间:2017-05-03 03:22:05

标签: c linux sockets

这是指C套接字。假设我已经将一些数据写入套接字,然后我调用read,将读取系统调用read buffer size(say 4096 etc)信息并删除套接字中的所有信息?基本上会读取只是将搜索指针向前移动到它读取的那么多字节或者它会读取并且只是从套接字中删除所有信息,以便下次调用read时它从第0个索引读取?

或者说我在没有从其他地方调用读取的情况下写入套接字?是否会替换或追加数据?

1 个答案:

答案 0 :(得分:2)

如果套接字上的可用数据多于read()的数量,则额外数据将保留在套接字缓冲区中,直到您阅读它为止。短读期间没有数据丢失。

写作类似。如果多次调用write(),则每次写入都会将数据附加到远程主机上的缓冲区。同样,没有数据丢失。

(最终,远程主机上的缓冲区将填满。发生这种情况时,write()将阻塞 - 本地主机将在发送更多数据之前等待缓冲区清空。)

从概念上讲,套接字对中的每个方向都像两个对等体之间的管道。无论一次读取/写入多少数据,发送的整个数据流将按照发送的顺序接收。