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