我想全局初始化一个套接字,sendto可以使用它来稍后发送udp数据包。我不想在我即将发送数据包时初始化套接字,而是在程序首次启动时初始化它,然后在不同的时间访问它。
如果套接字在那里坐了几个小时没有激活会导致问题吗?
答案 0 :(得分:3)
没有............................
答案 1 :(得分:2)
这取决于。套接字本身仍然有效,您可以明确地将其关闭,就像它是一个文件一样。但是,在谈论细节时,如果使用特定IP 而不是0.0.0.0 绑定套接字,则IP本身可能会消失(由于接口关闭或更改设置),这会导致套接字无法使用。如果接口关闭,如果以后再次启动并且具有相同的IP,则可以再次使用该套接字。
答案 2 :(得分:1)
这是一个特定于操作系统的问题。
说到类Unix操作系统,套接字被视为打开的文件,因此您使用的唯一资源是打开文件表中的条目,通常受限于ulimit:
myaut@panther:~> ulimit -a
...
open files (-n) 1024
Socket还会为其缓冲区占用少量内核内存。但由于它是开放文件,因此在您明确关闭它或您的程序已经死亡之前不应该关闭它。
其他操作系统可能具有类似的限制/要求。
然而,由于现在的内存非常便宜,保留预先打开的套接字在延迟方面有更多好处。