`
wx1569567608
  • 浏览: 71178 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

linux 下select的1024限制

 
阅读更多

http://www.bubuko.com/infodetail-769475.html

1024限定的不只是监听的个数,还是文件描述符的

最大值,注意,是值 

今天编写模拟客户端程序进行测试,使用了select。之前一直错记成1024是对fd_set里fd个数的限制(我的程序是每次select一个fd,所以自我感觉没问题),结果在socket连接个数到达1050~1100时,总发生段错误。

查看了core文件,反复理清程序的思路,都找不到问题点。更让我费解的是,通过注释部分代码(都是局部变量相关的),结果程序变成socket连接到达1500左右时发生段错误。

 

后来想到试试是不是select有问题,模拟程序不调用select,全部采用阻塞的socket,结果测试到10000个socket连接都没有问题。

 

最后在网上看到select中限定的fd的值最大值是FD_SETSIZE(我的环境下是1024),而不是个数。

也有人持反对意见,比如对值为1025的fd进行select也没问题。对此我没有测试,但结合我的实际情况是,对超过1024的fd进行select,问题不能立刻暴露(我都一直到1500了),但可能会存在

类似越界访问之类的问题(segment fault)。

 

之前还一直想不通,一直以为是类似ulimit的限制没有修改。但矛盾的是相同的配置,用poll/epoll写的服务端却可以测试到10K以上,现在终于了然。

转载于:https://my.oschina.net/u/1780368/blog/491863

分享到:
评论

相关推荐

    Linux网络通信select模型

    - **文件描述符限制**:select模型对可以监控的FD数量有硬性限制,通常是1024个,这对大型服务器来说可能不够。 - **效率问题**:每次调用`select`,操作系统都需要遍历所有FDs,随着FD数量增加,效率会降低。 - *...

    linux下socket编程之以select方式实现并发服务器

    综上所述,`select`方式的并发服务器模型在Linux下的Socket编程中具有重要的应用价值,它允许服务器高效地处理多个并发连接,是构建网络服务的基础之一。通过分析`tcpserver.c`和`tcpclient.c`的源代码,我们可以...

    EPOLL-linux下select-poll的增强版

    - Select:限制 FD 数量(通常为 1024),且在监控大量 FD 时效率低下,需要遍历整个 FD 集合。 - Poll:解决了 Select 的 FD 数量限制,但同样需要遍历所有 FD 来查找就绪事件。 - EPOLL:使用红黑树存储 FD,...

    linux下用select实现一对多通讯

    本文将详细介绍如何在Linux下使用`select`函数来实现这样的功能。 首先,`select`函数是Unix和类Unix系统中提供的一种I/O复用机制。它的基本工作原理是,将一组待监控的套接字描述符放入三个集合(读取集合、写入...

    linux下用select并发服务器

    总结来说,`select`在Linux下是一种基础的并发服务器实现方式,它允许我们同时处理多个客户端的连接请求和数据传输。尽管对于大规模并发场景存在效率问题,但在小规模应用中,`select`仍然是一个实用且可靠的工具。...

    linux下的高并发处理select 和epoll

    在Linux系统中,处理高并发I/O事件时,select和epoll是两种常见的技术。本文将详细介绍这两种技术,以及它们在处理大量并发连接时的特点和优势。 首先,我们来看看`select`函数。`select`是一种古老的I/O多路复用...

    linux中的select

    - **文件描述符限制**:在传统实现中,最多只能监控1024个套接字。 - **效率问题**:随着监控套接字数量的增加,每次调用`select()`时都需要遍历整个集合,导致性能下降。 - **复杂性**:对于更复杂的网络应用场景,...

    select网络模型-Linux

    `select`的主要缺点是它有一个固定大小的文件描述符集限制,通常由`FD_SETSIZE`宏定义(通常是1024),这意味着它可能无法处理大量并发连接。此外,`select`对于大型文件描述符集的效率较低,因为它需要线性扫描。 ...

    linux-c.rar_linux c select_linux select_select c语言

    然而,`select`有一些限制,例如文件描述符数量的限制(通常在1024以下),以及无法处理大量并发连接时的效率问题。为了解决这些问题,后来出现了`poll`和`epoll`等更高效、更强大的I/O多路复用技术。 总的来说,`...

    Linux_c++_select_demo

    `select`的一个主要限制是它可以监视的文件描述符数量有限,通常在几百个左右,这取决于系统的`FD_SETSIZE`定义。对于需要处理成千上万并发连接的应用,可能需要转向更高级的机制,如`epoll`或`kqueue`。 总的来说...

    linux_select_function_sample.rar_linux select_linux select 串口_li

    此外,`select`函数的一个限制是它能监控的文件描述符数量有限,对于大量并发连接,可能需要考虑使用更高级的机制,如`poll`或`epoll`。 通过分析`select函数串口应用例子.txt`,我们可以学习如何在实际代码中结合`...

    Linux中select函数使用详解.zip_Linux中select函数使用详解

    然而,`select`的缺点在于它有一个最大可监控文件描述符数量的限制(通常由`FD_SETSIZE`定义,通常是1024),并且当文件描述符数量较大时,其效率会下降,因为它需要不断扫描整个位集。 为了克服这些限制,后来出现...

    UART1.rar_Uart1Sends_linux_select_uart select函数

    在旧版本的Linux内核中,这个限制是1024,但在现代系统中,可以通过调整参数提高这个值。 - **错误处理**:select返回值可能会是负数,表示有错误发生。需要对这种情况进行适当的错误处理。 综上所述,这个压缩包中...

    linux c语言 select函数的用法

    `select`函数是Linux系统下用于实现I/O多路复用的核心函数之一,在C语言编程中被广泛使用。它能够有效地监控多个文件描述符(File Descriptor, FD),检测它们的状态变化(如可读、可写或异常情况)。当被监控的文件...

    tcp select 并发服务器

    但在某些简单场景下,`select`仍是一个合理的选择。 在提供的`tcp_echo_select.c`源代码中,我们可以看到如何使用`select`函数构建一个简单的TCP回显服务器。该服务器接受客户端连接,读取其发送的数据并原样返回,...

    linux使用select实现精确定时器详解

    参数说明:slect的第一个参数nfds为fdset集合中最大描述符值加1,fdset是一个位数组,其大小限制为__FD_SETSIZE(1024),位数组的每一位代表其对应的描述符是否需要被检查。select的第二三四个参数表示需要关注读、...

    linux内核select/poll,epoll实现与区别

    - `poll`与`select`非常相似,但它不局限于文件描述符的最大数量限制,因此更适合处理大量文件描述符的情况。`poll`也涉及到将描述符集从用户空间复制到内核空间,并调用驱动的poll回调函数来检查就绪状态。`poll`...

    linux中select系统调用文.pdf

    在Linux操作系统中,`select`系统调用是一个重要的I/O多路复用机制,它允许程序同时监视多个文件描述符,以等待它们准备就绪,从而进行读写操作。这在处理并发网络连接或者需要监听多个输入源时非常有用。`select`...

    linux网络编程中Select和poll服务程序

    - **优点**:支持任意数量的文件描述符,没有`select`的FD_SETSIZE限制,更适用于大型并发系统。 - **缺点**:相比`select`,`poll`的调用开销稍大,因为它需要创建和管理`pollfd`数组。另外,如果文件描述符数量...

Global site tag (gtag.js) - Google Analytics