在做FD_SET时调用select socket调用之前,如果我们设置一个大于1024的描述符值(FD_SETSIZE)有什么问题吗?它会创建任何未定义的行为吗?
答案 0 :(得分:1)
您需要查看您使用的操作系统的文档select
,但很可能会这样做。来自Linux手册页:
fd_set是固定大小的缓冲区。 执行 FD_CLR()或FD_SET() fd的值为负或等于或大于 FD_SETSIZE *将导致未定义的行为。而且,POSIX需要 fd是一个有效的文件描述符。
答案 1 :(得分:0)
是的,它会导致错误(perror = EINVAL
)或导致缓冲区溢出(在分配的缓冲区外读取)。
许多实现允许将FD_SETSIZE
重新定义为更大的值。在包含socket.h之前将其定义为更大的值,你应该没问题。只需确保首先查看C编译器的手册。