【问题标题】:Keeping socket open for UDP?为UDP保持套接字打开?
【发布时间】:2019-05-23 02:28:00
【问题描述】:
使用 TCP,发送数据的工作流程如下:
- open socket()
- write(data1)
- write(data2)
- write ... data n
- close(socket)
但是 UDP 怎么样呢?我们保持插座打开吗?还是每次数据准备好时我们都打开套接字?最佳做法是什么?
- open socket();
- write(data1);
- close(socket);
- open socket();
- write(data2);
- close(socket);
【问题讨论】:
标签:
sockets
network-programming
【解决方案1】:
打开一个 TCP 套接字通常意味着
- 在操作系统中创建套接字结构
- 建立 TCP 连接(与对等方的 3 次握手)
关闭 TCP 套接字意味着
打开一个 UDP 套接字不会触发任何网络通信,它只会在 OS 中创建一个套接字结构。
打开 TCP 套接字比打开 UDP 套接字的成本更高,因为打开和关闭 TCP 套接字会创建一个 TCP 会话,而打开和关闭 UDP 套接字只是一个本地操作。
最佳做法是重用现有的 UDP 套接字来发送/接收多个数据报。如果 UDP 套接字可以重新用于以后的通信,那么关闭它是没有用的。此外,如果应用程序关闭了 UDP 套接字,那么绑定到套接字的端口的传入流量将会丢失。
【解决方案2】:
是的,如果您有更多要发送(或接收)的内容,保持套接字打开是有意义的。