我们只是将一些旧软件移植到RH7,并且valgrind发送fd_set数组被写入到更远的数据边界。查看代码,软件正在设置fd_set数组中的所有位。 for循环的最大值来自gettablesize()。根据任务的启动方式,返回的值为1024或4096.当其4096时,代码超出范围。现在很明显代码应该使用FD_SETSIZE,但是有一个问题是为什么gettablesize()被用于fd_set max值。那么gettablesize()和FD_SETSIZE之间的区别是什么?我假设1024是可能的套接字文件描述符的最大数量,gettablesize()返回所有类型的文件描述符(套接字,文件等)的最大数量。
1)gettablesize()是否应该像这样用于socket连接?
2)为什么gettablesize()根据任务的运行方式返回不同的值?恩。任务通过system()调用启动,使用vagrind返回4096,在没有或没有valgrind 1024的情况下在命令行上运行等等。