【问题标题】:Change the type of a POSIX socket from UDP to TCP after creation创建后将 POSIX 套接字的类型从 UDP 更改为 TCP
【发布时间】:2019-01-17 20:44:51
【问题描述】:

是否可以在创建所述套接字后将套接字的类型从 UDP 更改为 TCP?

int sockfd_udp = socket(AF_INET, SOCK_DGRAM, 0);

根据其他信息,我想将创建的套接字sockfd_udp 从 UDP 切换到 TCP。我知道这不是打算完成的,但我正在寻找解决此问题的方法。

也可以选择创建一个新套接字 (sockfd_tcp) 并关闭旧套接字 (sockfd_udp),但在这种情况下,新套接字需要与旧套接字具有相同的文件描述符 (@ 987654325@)。

【问题讨论】:

    标签: linux sockets tcp udp posix


    【解决方案1】:

    尝试以下方法:

    int sockfd_udp = socket(AF_INET, SOCK_DGRAM, 0);
    ...
    int sockfd_tcp = socket(AF_INET, SOCK_STREAM, 0);
    dup2(sockfd_tcp, sockfd_udp);
    close(sockfd_tcp);
    sockfd_tcp = sockfd_udp;
    

    dup2() 如果 UDP 套接字仍然打开,它将关闭它。调用后底层 TCP 套接字有两个文件描述符:sockfd_tcp 和 sockfd_udp。保留想要的,关闭另一个。

    添加所需的错误检查,因为这些调用可能会失败。

    更多信息请参见man page of dup

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-14
      • 2018-10-31
      • 1970-01-01
      • 2016-07-30
      • 2018-04-03
      • 2014-02-10
      • 2010-10-16
      • 2010-10-18
      相关资源
      最近更新 更多