接收缓冲区、发送缓冲区、读状态、写状态他们之间的关系

接收缓冲区:

  • 位于接收端(通常是服务端或客户端)的套接字中的缓冲区,用于暂存来自发送端的数据。
  • 当发送端发送数据时,数据首先到达接收端的接收缓冲区。

发送缓冲区:

  • 位于发送端(通常是服务端或客户端)的套接字中的缓冲区,用于暂存即将发送的数据。
  • 当发送端准备发送数据时,数据会被放入发送缓冲区。

读状态(EPOLLIN):

  • 标记为“可读”状态意味着接收端的接收缓冲区中有数据可供读取。
  • 通常用于接收数据。

写状态(EPOLLOUT

  • 标记为“可写”状态意味着发送端的发送缓冲区有足够的空间来发送数据,并且接收端的接收缓冲区有足够的空间来接收数据。
  • 通常用于发送数据。

具体解释

1. 发送数据

假设服务端(A)需要发送数据给客户端(B):

  • 服务端A

    • 将数据放入发送缓冲区。
    • 关注客户端B连接的写状态(EPOLLOUT),以确认客户端B的接收缓冲区有足够的空间来接收数据。
    • 当客户端B的接收缓冲区有足够的空间时,服务端A可以发送数据。
  • 客户端B

    • 接收数据时,关注服务端A连接的读状态(EPOLLIN),以确认服务端A有数据可以读取。
    • 当服务端A发送数据后,客户端B的接收缓冲区将包含这些数据,此时客户端B可以通过读操作获取这些数据。
2. 接收数据

假设客户端(B)需要接收数据:

  • 服务端A

    • 发送数据到客户端B时,数据会先进入客户端B的接收缓冲区。
    • 客户端B需要关注服务端A连接的读状态(EPOLLIN),以确认服务端A有数据可以读取。
  • 客户端B

    • 从接收缓冲区读取数据。
    • 通过读操作获取数据。

总结

就有点绕,从常识来讲,服务端往客户端发送数据,一般会觉得服务端是写状态,客户端是读状态,这里的状态是指可读、可写,不是写和读,这样就好理解了。

读状态就是确保有数据,写状态就是确保有地方接受数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值