UDP套接字会过期吗?
Do UDP sockets expire?
我想全局初始化一个套接字,sendto 稍后可以使用它来发送 udp 数据包。我不想在刚要发送数据包时初始化套接字,而是想在程序首次启动时初始化它,然后在不同的时间访问它。
如果套接字在那里放置数小时而不活动,这会导致问题吗?
否......................
这是一个 OS 特定的问题。
谈到类 Unix 操作系统,套接字被算作 打开的文件 ,因此您消耗的唯一资源是打开文件 table 中的条目,这通常是受 ulimit 限制:
myaut@panther:~> ulimit -a
...
open files (-n) 1024
Socket 也会为其缓冲区占用少量内核内存。但是因为它是打开的文件,所以在你明确关闭它之前不应该关闭它,或者你的程序已经死了。
其他操作系统可能有类似的 limits/requirements。
然而,由于现在的内存非常便宜,保持预打开的套接字在延迟方面有更多好处。
视情况而定。套接字本身在您明确关闭它之前仍然有效,就好像它是一个文件一样。然而,说到细节,如果你用特定 IP 绑定套接字而不是 0.0.0.0,IP 本身可能会消失(由于接口关闭或设置更改),这会使你的套接字无法 -可用。在接口关闭的情况下,如果稍后再次启动并且具有相同的 ip,您的套接字可以再次使用。
我想全局初始化一个套接字,sendto 稍后可以使用它来发送 udp 数据包。我不想在刚要发送数据包时初始化套接字,而是想在程序首次启动时初始化它,然后在不同的时间访问它。
如果套接字在那里放置数小时而不活动,这会导致问题吗?
否......................
这是一个 OS 特定的问题。
谈到类 Unix 操作系统,套接字被算作 打开的文件 ,因此您消耗的唯一资源是打开文件 table 中的条目,这通常是受 ulimit 限制:
myaut@panther:~> ulimit -a
...
open files (-n) 1024
Socket 也会为其缓冲区占用少量内核内存。但是因为它是打开的文件,所以在你明确关闭它之前不应该关闭它,或者你的程序已经死了。
其他操作系统可能有类似的 limits/requirements。
然而,由于现在的内存非常便宜,保持预打开的套接字在延迟方面有更多好处。
视情况而定。套接字本身在您明确关闭它之前仍然有效,就好像它是一个文件一样。然而,说到细节,如果你用特定 IP 绑定套接字而不是 0.0.0.0,IP 本身可能会消失(由于接口关闭或设置更改),这会使你的套接字无法 -可用。在接口关闭的情况下,如果稍后再次启动并且具有相同的 ip,您的套接字可以再次使用。