我知道Linux TCP服务器中的::send
可以限制有效负载的发送,因此在发送整个有效负载之前,需要多次调用::send
.
i、 有效载荷为1024字节
sent_bytes = ::send(fd, ...)
,其中sent_bytes
仅为256字节,因此需要再次调用.
有没有办法知道在发送之前可以发送多少字节?如果套接字将允许整个消息,或者消息将被碎片化,以及碎片化的程度如何?
Example Case
2条消息由同一tcp客户端上的不同线程通过::send()
同时发送到同一套接字.在某些情况下,如果消息很大,则需要多次调用::send()
,因为并非所有字节都在初始调用时发送.因此,使用循环解决方案,直到发送所有字节.循环是静音的,因此可以被视为线程安全的,因此每个线程都必须在另一个线程之后执行发送.但是,我担心的是,由于Tcp是一个流,客户端将接收每条消息的片段,我在想,如果我知道一次发送多少字节,向每条消息添加帧,我可以在客户端重建消息.
尽管对::send()
的调用是按顺序进行的,但字节流是否仍然是混合的?
实际上,这种情况会发生吗:
- 服务器端
- 客户端