POSIX определяет send / recv как атомарные операции, поэтому, если вы говорите о POSIX send / recv, тогда да, вы можете вызывать их одновременно из нескольких потоков, и все будет работать.
Это не обязательно означает, что они будут выполняться параллельно - в случае нескольких отправок вторая, скорее всего, будет заблокирована до завершения первой. Вы, вероятно, этого не заметите, поскольку отправка завершается, как только данные помещаются в буфер сокета.
Если вы используете сокеты SOCK_STREAM, попытка делать что-то параллельное вряд ли будет полезно, поскольку send / recv может отправлять или получать только часть сообщения, что означает, что все может разделиться.
Блокирование send / recv на сокетах SOCK_STREAM блокируется только до тех пор, пока они не отправят или не получат хотя бы 1 байт, поэтому разница между блокировкой и неблокировкой бесполезна.