我有一个线程在循环中调用recvfrom
,超时为100毫秒。
另一个线程定期调用sendto
。
sendto
函数是否等到超时(或成功读取)释放recvfrom
或者是否在该段时间内发送数据。
答案 0 :(得分:3)
C函数是否被recvfrom和sendto互斥?
没有。它们可以同时由不同的线程执行。
sendto()
不等待recvfrom()
读取数据。它会将数据放入套接字的缓冲区并返回。多个sendto()
可能会阻止之前的sendto()
完成。如果在发送时发生任何错误(缓冲区已满,消息太大等),则可以检查检查errno
以检查失败原因。基本上,您不需要在两个线程的sendto()
和recvfrom()
调用之间进行任何同步;它们是原子操作。
答案 1 :(得分:1)
不,它不会等待,(至少,它不会等待超过必要的时间来获得对通信堆栈的线程安全访问)。