为 UDP 保持套接字打开?

Keeping socket open for UDP?

使用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);

是的,如果您要发送(或接收)更多内容,保持套接字打开是有意义的。

打开一个TCP套接字通常意味着

  • 在操作系统中创建套接字结构
  • 建立 TCP 连接(与对等点进行 3 次握手)

关闭 TCP 套接字意味着

  • TCP 连接释放
  • 删除操作系统中的套接字结构

打开 UDP 套接字不会触发任何网络通信,只会在 OS 中创建一个套接字结构。

打开 TCP 套接字比打开 UDP 套接字的成本更高,因为打开和关闭 TCP 套接字会创建 TCP 会话,而打开和关闭 UDP 套接字只是一个本地操作。

最好为 sending/receiving 多个数据报重用现有的 UDP 套接字。如果 UDP 套接字可以重新用于以后的通信,那么关闭它是没有用的。此外,如果应用程序关闭了 UDP 套接字,那么绑定到套接字的端口的传入流量将会丢失。