在select中给出套接字描述符值大于1024

时间:2012-10-10 11:50:19

标签: sockets

在做FD_SET时调用select socket调用之前,如果我们设置一个大于1024的描述符值(FD_SETSIZE)有什么问题吗?它会创建任何未定义的行为吗?

2 个答案:

答案 0 :(得分:1)

您需要查看您使用的操作系统的文档select,但很可能会这样做。来自Linux手册页:

  

fd_set是固定大小的缓冲区。 执行 FD_CLR()或FD_SET()   fd的值为负或等于或大于   FD_SETSIZE *将导致未定义的行为。而且,POSIX需要   fd是一个有效的文件描述符。

答案 1 :(得分:0)

是的,它会导致错误(perror = EINVAL)或导致缓冲区溢出(在分配的缓冲区外读取)。

许多实现允许将FD_SETSIZE重新定义为更大的值。在包含socket.h之前将其定义为更大的值,你应该没问题。只需确保首先查看C编译器的手册。