在下面的服务器代码中调用套接字后,我收到错误“打开的文件太多”。此代码被重复调用,并且仅在 server_SD 获得值 1022 之后才发生。所以我假设我达到了“ulimit -n”所禁止的 1024 的限制。我不明白的是我正在关闭套接字,这应该使 fd 可重用,但这似乎没有发生。
注意:使用 linux,是的,客户端也关闭了,不,我不是 root 用户,所以移动限制不是一种选择,我一次最多应该打开 20 个(左右)套接字。在我的程序的整个生命周期中,我希望打开和关闭接近 1000000 个套接字(因此需要非常强大的重用)。
server_SD = socket (AF_INET, SOCK_STREAM, 0);
bind (server_SD, (struct sockaddr *) &server_address, server_len)
listen (server_SD,1)
client_SD = accept (server_SD, (struct sockaddr *)&client_address, &client_len)
// read, write etc...
shutdown (server_SD, 2);
close (server_SD)
有谁知道如何保证关闭和可重用性?
谢谢。