我有一个PERL脚本,它正在创建大量的套接字(大约700个套接字),然后使用这些套接字进行操作。之后,它使用system(...)命令启动另一个应用程序,该应用程序会打开更多的套接字(比如800个左右),但是由于每个进程的套接字数量的限制是1024,所以我超过了限制,并且没有从套接字编号1024及以后获得预期的数据。
现在我的问题是:
发布于 2011-12-24 17:32:26
看看perlvar $^F,它控制哪些文件描述符被设置为关闭-on-exec。默认设置应该是在调用system()时关闭所有这些套接字描述符,但如果不是,则可能$^F没有设置为您想要的。在Linux系统上,一个非常快速和简单的方法是在现有的system()调用之前尝试这个调用:
system("ls -l /proc/self/fd");ls的输出将显示在执行"ls“命令时仍打开哪些文件。您很可能会看到只有stdin、stdout和stderr (描述符0、1和2)是打开的,但是如果您看到套接字描述符打开,我将尝试设置$^F =2,看看这是否有帮助。
https://stackoverflow.com/questions/8625775
复制相似问题