为什么套接字无限返回-1(errno:104)

没有人

我的套接字程序是服务器-客户端结构。

奇怪的是,TCP套接字只是构造(客户端连接和服务器接受)的可能性很小。

并且我使用select而不是读取套接字,它将返回-1且errno为104(对等连接重置)。

但是我既不发送服务器也不发送任何消息,也不发送任何客户端消息,通常情况下,它应该阻塞选择功能(我的选择功能未设置超时限制),但读取功能返回-1。

为什么会发生?或者我该如何获得更多详细信息来调试此问题?

谢谢你们。

平台:Ubuntu 13.04 64bits,gcc编译器

我的代码的最低版本:

服务器:

for(;;)
    {
        rset= allset;
        select(maxfd+1, &rset, NULL, NULL, NULL);

        //read socket
        if( FD_ISSET(fconn[i].fd, &rset) )
        {
            len=read(fconn[i].fd, &tcp_buf.b[4], PACKET_LENGTH);

            //the connection will close
            if( len<0 )
            {
                printf("%s, fconn %s read length:%d, errno:%d(%s), close connection\n", crtTime(), fconn[i].ip, len, errno, strerror(errno) );
                close( fconn[i].fd );
                FD_CLR( fconn[i].fd, &allset );
            }
        }

        //construct new connection
        if( FD_ISSET(forwardSockfd, &rset) )
        {
            clilen= sizeof(cliaddr);
            connfd= accept( forwardSockfd, (struct sockaddr*)&cliaddr, &clilen );
            inet_ntop( AF_INET, &cliaddr.sin_addr, ip, sizeof(ip) );
            client_port= (int)cliaddr.sin_port;

            //set send buffer size
            int sendBuf= SOCKET_BUF_LENGTH;
            setsockopt(connfd, SOL_SOCKET, SO_SNDBUF, &sendBuf, sizeof(sendBuf));

            FD_SET( connfd, &allset );
        }
    }

客户(我的阅读功能):

int readline(int fd, void* ptr, int len)
{
    int    rtn= len;
    void*  bp= ptr;
    int    rc;
    fd_set fdset;

    FD_ZERO(&fdset);
    FD_SET(fd, &fdset);
    while( len>0 )
    {
        select(fd+1, &fdset, NULL, NULL, NULL);
        rc=read(fd, bp, len);


        if(rc>0)
        {
            bp+= rc;
            len-= rc;
        }

        else
        {
            return rc;
        }
    }

    return rtn;
}
用户名

它将返回-1并且errno为104(对等方重置连接)

因此,连接被对等方重置。那可以随时发生。这是您无法控制的。正确的操作是合上插座,然后将其遗忘。连接不再存在。尝试选择并再次读取它只是放错了位置。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

TensorFlow IOError:[Errno套接字错误] [Errno 104]对等重置连接

来自分类Dev

套接字connect()返回errno EINVAL

来自分类Dev

套接字始终返回-1

来自分类Dev

当接口1上有:: 1时,为什么可以将此套接字绑定到:: 1%2?

来自分类Dev

当接口1上有:: 1时,为什么可以将此套接字绑定到:: 1%2?

来自分类Dev

套接字C ++:recv函数返回-1

来自分类Dev

为什么套接字仅发送1KB(425B)数据?

来自分类Dev

为什么在调用 select 时套接字文件描述符参数递增 1?

来自分类Dev

如果套接字通信的另一端关闭,为什么recv()没有设置errno?

来自分类Dev

为什么当程序在正确的端口上侦听,套接字绑定到所有接口时为何“ [Errno 61] Connection拒绝”?

来自分类Dev

为什么errno,当POSIX函数通过返回-1或NULL指示错误情况时

来自分类Dev

Python:为什么peek(1)返回8K字节而不是1字节?

来自分类Dev

为什么我们使用无限循环让套接字服务器继续监听?

来自分类Dev

ptrace系统调用返回-1,errno = 0

来自分类Dev

对于从accept()返回的套接字,WSASendMsg为什么会返回WSAEINVAL?

来自分类Dev

为什么乘积[]返回1?

来自分类Dev

为什么〜0返回-1?

来自分类Dev

为什么 DATEDIFF 返回 -1

来自分类Dev

为什么当我使用“ control-c”关闭发送对等端上的套接字时,接收对等端上的套接字保持无限接收”

来自分类Dev

python urllib收到[Errno套接字错误]

来自分类Dev

IOError:使用BeautifulSoup的[Errno套接字错误]

来自分类Dev

为什么为#{} 1/0在EL与JSF生成的“无限”?

来自分类Dev

为什么套接字的行为如此?

来自分类Dev

为什么套接字实现比请求慢?

来自分类Dev

为什么套接字会发出多次?

来自分类Dev

为什么套接字的行为是这样的?

来自分类Dev

为什么在原始套接字上关闭/关闭后,read()不返回?

来自分类Dev

为什么套接字中的recv()函数不返回任何内容?

来自分类Dev

为什么UNIX域数据报套接字的recvfrom()返回无效参数?

Related 相关文章

  1. 1

    TensorFlow IOError:[Errno套接字错误] [Errno 104]对等重置连接

  2. 2

    套接字connect()返回errno EINVAL

  3. 3

    套接字始终返回-1

  4. 4

    当接口1上有:: 1时,为什么可以将此套接字绑定到:: 1%2?

  5. 5

    当接口1上有:: 1时,为什么可以将此套接字绑定到:: 1%2?

  6. 6

    套接字C ++:recv函数返回-1

  7. 7

    为什么套接字仅发送1KB(425B)数据?

  8. 8

    为什么在调用 select 时套接字文件描述符参数递增 1?

  9. 9

    如果套接字通信的另一端关闭,为什么recv()没有设置errno?

  10. 10

    为什么当程序在正确的端口上侦听,套接字绑定到所有接口时为何“ [Errno 61] Connection拒绝”?

  11. 11

    为什么errno,当POSIX函数通过返回-1或NULL指示错误情况时

  12. 12

    Python:为什么peek(1)返回8K字节而不是1字节?

  13. 13

    为什么我们使用无限循环让套接字服务器继续监听?

  14. 14

    ptrace系统调用返回-1,errno = 0

  15. 15

    对于从accept()返回的套接字,WSASendMsg为什么会返回WSAEINVAL?

  16. 16

    为什么乘积[]返回1?

  17. 17

    为什么〜0返回-1?

  18. 18

    为什么 DATEDIFF 返回 -1

  19. 19

    为什么当我使用“ control-c”关闭发送对等端上的套接字时,接收对等端上的套接字保持无限接收”

  20. 20

    python urllib收到[Errno套接字错误]

  21. 21

    IOError:使用BeautifulSoup的[Errno套接字错误]

  22. 22

    为什么为#{} 1/0在EL与JSF生成的“无限”?

  23. 23

    为什么套接字的行为如此?

  24. 24

    为什么套接字实现比请求慢?

  25. 25

    为什么套接字会发出多次?

  26. 26

    为什么套接字的行为是这样的?

  27. 27

    为什么在原始套接字上关闭/关闭后,read()不返回?

  28. 28

    为什么套接字中的recv()函数不返回任何内容?

  29. 29

    为什么UNIX域数据报套接字的recvfrom()返回无效参数?

热门标签

归档