假设我有一个发送套接字和接收套接字。发送套接字发送总共1 GB的消息,但是接收套接字既不读取也不关闭套接字。在任一套接字关闭之前,这1 GB的消息会发生什么?它们是否还在操作系统缓冲区中等待?更具体地说:
- 每个发送者都有自己的线程。
- 所有发送者都已刷新其输出流。
- 所有消息都通过环回接口传递。
是的,数据将会在TCP/IP堆栈中的缓冲区中存储。不过这个缓冲区的大小远远小于1GB。
假设您使用TCP - 它采用流量控制来处理这种情况,接收方缓冲区将会填满。当接收方缓冲区已满时,发送方将停止传输。发送方缓冲区将会填满,当它也已满时,应用程序写入/发送调用将会阻塞,直到接收方开始消耗数据或发生错误。