<br><div><div>The problem is caused by the define of FD_SETSIZE</div><div><br></div><div>The default FD_SETSIZE is 64</div><div><br></div><div>I redefine FD_SETSIZE or change select to poll, The tcp server runs correctly.<br></div><div><br></div><div style="font-size: 12px;font-family: Arial Narrow;padding:2px 0 2px 0;">------------------ Original ------------------</div><div style="font-size: 12px;background:#efefef;padding:8px;"><div><b>From: </b> "jameszxj";<jameszxj@gmail.com>;</div><div><b>Date: </b> Thu, Dec 28, 2017 10:47 AM</div><div><b>To: </b> "rtems-users@rtems.org"<users@rtems.org>;<wbr></div><div></div><div><b>Subject: </b> Question about socket</div></div><div><br></div>I use the rtems version on github, and configure it use libbsd network library. <br>I config rtems file descriptors as 200<br>#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS     200<br><br>and run tcp server on the board.<br><br>static void vtio_task(rtems_task_argument arg)<br>{<br>    struct sockaddr_in l_addr;<br>    int addrlen;<br>    int s = socket(AF_INET, SOCK_STREAM, 0);<br><br>    if (s < 0)<br>    {<br>        printf("creat socket error.\n");<br>        return;<br>    }<br><br>    memset(&l_addr, 0, sizeof(l_addr));<br>    l_addr.sin_family = AF_INET;<br>    l_addr.sin_port = htons(6789);<br>    l_addr.sin_addr.s_addr = htonl(INADDR_ANY);<br>    <br>    int ret = bind(s, (const struct sockaddr *) &l_addr, sizeof(struct sockaddr));<br>    if (ret < 0)<br>    {<br>        printf("bind socket error.\n");<br>        return;<br>    }<br>    <br>    ret = listen(s, 5);<br>    if (ret < 0)<br>    {<br>        printf("listen socket error.\n");<br>        return;<br>    }<br><br><br>    while(1)<br>    {<br>        struct fd_set read_set;<br><br>        int sock = accept(s, (struct sockaddr *)&l_addr, (socklen_t *)&addrlen);<br><br>        printf("new socket %d\n", sock);<br>        while(1)<br>        {<br>            FD_ZERO(&read_set);<br>            FD_SET(sock, &read_set);<br><br>            ret = select(sock+1, NULL, &read_set, NULL, NULL);<br>            if (ret <= 0)<br>            {<br>                perror("select error");<br>                close(sock);<br>                break;<br>            }<br><br>            ret = recv(sock, buf, 1024, 0);<br>            if (ret > 0)<br>            {<br>                send(sock, buf, ret, 0);<br>            }<br>            else<br>            {<br>                perror("recv error");<br>                close(sock);<br>                break;<br>            }<br>        }<br>    }<br>}<br><br>I run a test(connect=>write=>disconnect   cyclic) from PC,  When socket number>=65£¬the select,send,recv functions returns error. errno message:(select error: Bad file number)<br><br><br><br><br></div>