保持套接字开放以使用UDP?

时间:2019-05-22 10:39:06

标签: sockets network-programming

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

2 个答案:

答案 0 :(得分:1)

打开TCP套接字通常意味着

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

并关闭TCP套接字意味着

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

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

打开TCP套接字比打开UDP套接字的开销更大,因为打开和关闭TCP套接字会创建TCP会话,而打开和关闭UDP套接字仅是本地操作。

最佳做法是重用现有的UDP套接字来发送/接收多个数据报。如果可以将其重新用于以后的通信,则关闭UDP套接字是无用的。此外,如果应用程序关闭了UDP套接字,则与该套接字绑定的端口的传入流量将丢失。

答案 1 :(得分:0)

是的,如果还有更多的发送(或接收)操作,则保持套接字打开是很有意义的。