SOCK_DGRAM 套接字接收线程安全?

时间:2021-03-24 07:12:00

标签: sockets network-programming datagram unix-socket

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

如果多个线程在 socket 上调用 recv(),保证每个线程都能得到一个干净的 UDP 数据包,还是有可能数据混淆?

socket是阻塞模式还是非阻塞模式会影响行为吗?任何指向文档的指针将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

Posix 标准明确列举了所有不安全的标准函数:

<块引用>

2.9.1 线程安全

本 POSIX.1-2017 卷定义的所有函数均应为 线程安全,除了以下功能1不需要 线程安全。

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

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

相关问题