为 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 套接字,那么绑定到套接字的端口的传入流量将会丢失。
使用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 套接字,那么绑定到套接字的端口的传入流量将会丢失。