O POSIX define send / recv como operações atômicas, portanto, supondo que você esteja falando sobre o POSIX send / recv, sim, você pode chamá-los simultaneamente a partir de vários threads e tudo funcionará.
Isso não significa necessariamente que eles serão executados em paralelo - no caso de envios múltiplos, o segundo provavelmente bloqueará até que o primeiro seja concluído. Você provavelmente não notará muito, pois o envio é concluído quando os dados são colocados no buffer do soquete.
Se você estiver usando soquetes SOCK_STREAM, é menos provável que tentar fazer coisas em paralelo seja útil, pois enviar / receber pode enviar ou receber apenas parte de uma mensagem, o que significa que as coisas podem ser divididas.
O bloqueio de envio / recv nos soquetes SOCK_STREAM apenas bloqueia até que eles enviem ou recebam novamente pelo menos 1 byte, portanto, a diferença entre bloqueio e não bloqueio não é útil.