创建后将 POSIX 套接字的类型从 UDP 更改为 TCP
Posted
技术标签:
【中文标题】创建后将 POSIX 套接字的类型从 UDP 更改为 TCP【英文标题】:Change the type of a POSIX socket from UDP to TCP after creation 【发布时间】: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@)。
【问题讨论】:
【参考方案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。
【讨论】:
以上是关于创建后将 POSIX 套接字的类型从 UDP 更改为 TCP的主要内容,如果未能解决你的问题,请参考以下文章