【问题标题】:Is it possible to do sendto() recvfrom() simultaneously?是否可以同时进行 sendto() recvfrom() ?
【发布时间】:2016-06-08 13:51:37
【问题描述】:

我正在使用 UDP 套接字制作非常简单的 TCP 模拟网络应用程序。

但是,我想同时使用和调用sendto()recvfrom() 函数来实现使用称为“选择性重复”协议的流水线。我的意思是不像发送,等待,接收,发送,等待,接收,...,我的意思是像发送,发送,发送,接收,发送,发送,接收,接收这样的顺序,没有任何调用的顺序@ 987654323@,recvfrom(),就是这些函数的随机调用。

但基本上,如果我不能同时使用这些功能,sendto()recvfrom() 就像停止和等待协议一样。

但是,在流水线实现中,sendto()recvfrom() 函数同时作用。

我应该使用pthread 还是其他解决方案?还是多路复用?

【问题讨论】:

    标签: c networking tcp


    【解决方案1】:

    要同时进行任何事情,您需要有多个线程。

    一个线程将根据需要调用sendto,另一个线程将在循环中调用recvfrom

    【讨论】:

    • 并非如此。非阻塞套接字加上 (e)poll 也是一种方法。
    • 一个线程在无限循环中调用sendto,另一个线程在无限循环中调用recvfrom?
    • @Olaf 你的意思是一个线程可以同时在两个地方?快来吧。
    • @EJP:不,我的意思是使用非阻塞或异步 IO(不确定后者是否可能,但第一个是可能的)。采用哪种方式取决于实际应用和其他各种情况。如果您只有 1 个 CPU,则也永远不会有 2 个线程同时处于活动状态。
    • @A.Cho 基本上,是的。在您的接收线程上,您需要使用带有超时的select,以便您可以定期检查退出条件。
    【解决方案2】:

    如果你想自己实现,应该使用线程。 但是,如果您想使用内置函数,请通过第 7.2 节 this pdf 中的选择函数。它是一个强大的工具,也是最常用的。

    它的主要作用是跟踪准备好进行通信的连接。

    【讨论】:

      猜你喜欢
      • 2016-05-26
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多