首页 文章

两个线程可以在同一个套接字上同时`send`和`recv`吗?

提问于
浏览
2

我需要重复向套接字发送和接收UDP数据报 . 我的想法是产生两个线程,一个负责发送,另一个负责接收 . 只有当一个线程可以等待阻塞 recv() 而另一个线程同时在同一个套接字上执行 send() 时,整个想法才有意义 .

我做了一些谷歌搜索,发现了这个问题:Are parallel calls to send/recv on the same socket valid?接受的答案提到 send()recv() 是线程安全的(哇......),但接着是一个惊人的评论:

这并不一定意味着他们将并行执行

哎呀 . 这是否意味着如果我实现了我的多线程创意,我是否会在发送线程等待接收线程的 recv() 在实际开始发送数据之前返回?坏 .

这个被接受的答案是否仅涉及两个并行的,或者如果对于尝试并行执行一个 send() 和一个 recv() 的关注是真实的,那么这是不明确的 . 因此:

两个线程在同一个套接字上调用 send() 和调用 recv() 是否会被并行执行,或者其中一个调用会阻塞,直到另一个返回?

1 回答

  • 0

    简短回答:您应该可以使用相同的套接字句柄来分别发送和接收线程 .

    常见的场景是视频 Session 应用程序 . 您可能希望从麦克风录制一个线程并从udp端口发送音频 . 另一个线程在同一端口上接收数据包并通过扬声器播放它们 .

    如果您的协议更加同步(即请求/响应流 - 为了发送,您首先必须先收到一些东西),然后从设计角度来看,单个可能的线程更有意义 .

相关问题