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()
调用之间进行任何同步;它们是原子操作。
不,它不会等待(至少,它不会等待超过获得对通信堆栈的线程安全访问所需的时间)。
我有一个线程在循环中调用 recvfrom
,超时为 100 毫秒。
另一个线程定期调用 sendto
。
sendto
函数是等到 recvfrom
因超时(或成功读取)释放还是在该时间段内发送数据。
Are the C functions recvfrom and sendto mutually exclusive?
没有。它们可以同时被不同的线程执行。
sendto()
不等待 recvfrom()
读取数据。它会将数据放入套接字的缓冲区和 return。多个 sendto()
可能会阻止前一个 sendto()
完成。如果在发送时发生任何错误(缓冲区已满,消息太大等),您可以检查 inspect errno
以检查失败的原因。基本上,您不需要在来自两个线程的 sendto()
和 recvfrom()
调用之间进行任何同步;它们是原子操作。
不,它不会等待(至少,它不会等待超过获得对通信堆栈的线程安全访问所需的时间)。