C函数是否被recvfrom和sendto互斥?

时间:2015-06-16 17:12:15

标签: c linux sockets udp thread-safety

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

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

2 个答案:

答案 0 :(得分:3)

  

C函数是否被recvfrom和sendto互斥?

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

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

答案 1 :(得分:1)

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