On Fri, Feb 12, 2016 at 9:53 AM, Claudio Scordino <clau...@evidence.eu.com> wrote: > Hi all. > > Suppose I have an application that needs to send the very same data to > several sockets already connected. In this case, the application has > to call the sendto() syscall several times: > > for(...) > sendto(...) > > This makes the application waste time in entering/exiting the kernel > level several times. > Moreover, if I'm not wrong, the kernel is free to execute pending work > (e.g., softirqs) when returning from a syscall, making the application > experience further latency. > > I therefore wonder if a mechanism exists for sending the data to > several sockets using just a single syscall. If not, has anybody ever > thought about adding a syscall like the following ? > > sendto-multicast(..., int number_of_sockets, int* const sockets []) > > I can't see any obvious reason why such an approach could be wrong. > The design of KCM allows for this where sendmmsg can be used to send messages over TCP to various connections. Overcoming HOL blocking becomes the biggest issue to address with something like that I think. Using recvmmsg to get messages from multiple TCP sockets should be doable in KCM.
Tom > Many thanks, > > Claudio