区分应用层的recv,send和内核中套接字的真正读取数据,要知道,TCP协议层是运行与内核当中,而通信是网卡直接的通信,因此,不要认为,没有调用recv就不会有数据,不管调没调用recv,只要对方send,线路上有数据,那么,协议就会从网卡里面读取该数据进内核的socket缓冲区中,而调用recv的真正作用只是把数据从socket内核缓冲区中把数据拷贝到应用层指定的buffer中,仅此而已,对协议完全没影响,同理,因为socket默认是全缓冲,如果没有setsocketopt的话,只有当socket内核缓冲区中的数据满了之后才会执行真正的发送数据,才会把数据从socket 的缓冲区中通过网卡把数据发送出去,其实就是执行真正的IO操作一样,因此,send的操作,只是把应用层的数据拷贝到socket的缓冲区中而已,并不表示把数据发送出去了,明白这几点。
recv和send的真正作用
最新推荐文章于 2024-08-23 19:02:33 发布