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