SOCK_DGRAM 套接字接收线程安全?

SOCK_DGRAM socket recv thread-safe?

对于 recv() 方法,UNIX SOCK_DGRAM 套接字是线程安全的吗?

如果多个线程在套接字上调用 recv(),是否保证每个线程都获得一个干净的 UDP 数据包,或者是否有可能混淆数据?

该行为是否会受到套接字是处于阻塞模式还是非阻塞模式的影响?非常感谢任何指向文档的指针。

从多个线程调用 recv() 是安全的操作。如果套接字是数据报套接字,则每个 recv returns 一个不与其他数据报混合的唯一数据报。

Posix标准显式枚举所有不安全的标准函数:

2.9.1 Thread-Safety

All functions defined by this volume of POSIX.1-2017 shall be thread-safe, except that the following functions1 need not be thread-safe.

asctime() basename() catgets() crypt() ctime() ....

有将近 100 个不安全的函数和仅在特定条件下安全的其他函数。 recv() 不存在。参见 POSIX.1-2017 2.9.1 Thread-Safety