在创建套接字之后,是否可以将套接字的类型从UDP更改为TCP?
int sockfd_udp = socket(AF_INET, SOCK_DGRAM, 0);根据其他信息,我想将创建的套接字sockfd_udp从UDP切换到TCP。我知道这不是故意要做的,但我正在寻找解决这个问题的方法。
还可以选择创建新套接字(sockfd_tcp)并关闭旧套接字(sockfd_udp),但在这种情况下,新套接字需要具有与旧套接字(sockfd_tcp = sockfd_udp)相同的文件描述符。
发布于 2018-08-10 20:07:10
尝试以下操作:
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;如果UDP套接字仍处于打开状态,dup2()会将其关闭。调用之后,底层的TCP套接字有两个文件描述符: sockfd_tcp和sockfd_udp。保留想要的那个,关闭另一个。
添加所需的错误检查,因为这些调用可能会失败。
有关详细信息,请参阅man page of dup。
https://stackoverflow.com/questions/51783036
复制相似问题