Separating network IO into a Transport trait would allow interchangeable network stack implementations and give end users more flexibility if they want to implement custom send or recv. For example, if someone wanted to use linux's sendmmsg(...) api instead of send_to(...). The sACN logic and sequence numbering, etc, should all be contained in a similar place, but the network calls should be separated from the logic, in my opinion.