gpt4 book ai didi

linux - 创建后将 POSIX 套接字的类型从 UDP 更改为 TCP

转载 作者:太空宇宙 更新时间:2023-11-04 10:07:05 30 4
gpt4 key购买 nike

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

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

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

创建新套接字(sockfd_tcp)和关闭旧套接字(sockfd_udp)也是一个选项,但在这种情况下,新套接字需要有与旧套接字相同的文件描述符 (sockfd_tcp = sockfd_udp)。

最佳答案

尝试以下操作:

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获取更多信息。

关于linux - 创建后将 POSIX 套接字的类型从 UDP 更改为 TCP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51783036/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com