首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建POSIX套接字后,将其类型从UDP更改为TCP

创建POSIX套接字后,将其类型从UDP更改为TCP
EN

Stack Overflow用户
提问于 2018-08-10 17:16:32
回答 1查看 62关注 0票数 0

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

代码语言:javascript
运行
复制
int sockfd_udp = socket(AF_INET, SOCK_DGRAM, 0);

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-10 20:07:10

尝试以下操作:

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51783036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档