C 函数 recvfrom 和 sendto 是否互斥?

Are the C functions recvfrom and sendto mutually exclusive?

我有一个线程在循环中调用 recvfrom,超时为 100 毫秒。 另一个线程定期调用 sendto

sendto 函数是等到 recvfrom 因超时(或成功读取)释放还是在该时间段内发送数据。

Are the C functions recvfrom and sendto mutually exclusive?

没有。它们可以同时被不同的线程执行。

sendto() 不等待 recvfrom() 读取数据。它会将数据放入套接字的缓冲区和 return。多个 sendto() 可能会阻止前一个 sendto() 完成。如果在发送时发生任何错误(缓冲区已满,消息太大等),您可以检查 inspect errno 以检查失败的原因。基本上,您不需要在来自两个线程的 sendto()recvfrom() 调用之间进行任何同步;它们是原子操作。

不,它不会等待(至少,它不会等待超过获得对通信堆栈的线程安全访问所需的时间)。