`

connect超时时间过长

 
阅读更多
connect连接时如果跨网段会造成超时,这样会阻塞当前,如果是带GUI的,则会卡住程序,
这样有2种解决方法:
1.用多线程,将连接放在线程中去处理,这样要等也没关系

2.但是实际上还可以设置非阻塞,然后select,这样也会卡,但是这个卡的时间可以自己去设定,那么卡2,3秒是可以满足目前的需求的
#define CONNECT_TIME_OUT 3
    timeval tm;
    fd_set set;
    unsigned long ul = 1;
    ioctl(m_sockfd, FIONBIO, &ul); //设置为非阻塞模式
    int len = sizeof(int);
    bool ret = false;
    int error = -1;
    if( connect(m_sockfd, (struct sockaddr *)&addr, sizeof(addr)) == -1)
    {
        tm.tv_sec = CONNECT_TIME_OUT;
        tm.tv_usec = 0;
        FD_ZERO(&set);
        FD_SET(m_sockfd, &set);
        if( select(m_sockfd+1, NULL, &set, NULL, &tm) > 0)
        {
            getsockopt(m_sockfd, SOL_SOCKET, SO_ERROR, &error, (socklen_t *)&len);
            if(error == 0){
                ret = true;
            }else{
                ret = false;
            }
        }else
        {
            ret = false;
        }
    }else{
        ret = true;
    }
    ul = 0;
    ioctl(m_sockfd, FIONBIO, &ul); //设置为阻塞模式
    if(!ret)
    {
        tcp_close();
        return -1;
    }


这里有一些别的解决方案和一些需要注意的
http://www.cnitblog.com/zouzheng/archive/2010/11/25/71711.html
分享到:
评论

相关推荐

    windows下设置socket的connect超时

    在Windows环境下进行网络编程时,有时需要对socket连接进行超时控制,特别是在客户端与服务器通信的过程中,如果连接请求长时间没有响应,程序可能会陷入无休止的等待状态,从而导致资源浪费甚至程序卡死。...

    详解Nginx服务器中配置超时时间的方法

    在服务器运行过程中,如果一个请求耗时过长,可能导致服务器资源被过度占用,从而影响其他用户的正常访问。通过设定超时时间,可以在特定时间后结束无响应的请求,避免系统资源被长时间锁定,从而提高服务器的性能和...

    c#socket连接池和连接超时时间设置

    提供一个c# socket连接池设计的例子,解决socket并发连接限制的问题,并且提供一种设置连接超时时间的方法,默认连接超时时间是不能设置的,提供了socket网络发送数据的接口.可用于pos小票打印机通讯。

    Tcpclient连接服务器连接超时设置

    因此,我们需要设定一个合理的超时值,确保连接尝试不会阻塞程序执行过长时间。 在C#中,`TcpClient`类本身并不直接提供连接超时的设置选项。为了实现连接超时,我们需要利用异步编程和`Socket`对象的特性。以下是...

    Linux下connect超时处理(总结)

    然而,当目标服务器无法响应或响应速度过慢时,`connect`可能会导致长时间的阻塞,这在需要高效率扫描大量服务器端口的场景下尤为不便。本文将对Linux下`connect`超时处理进行总结,探讨如何实现非阻塞的`connect`...

    Linux下Socket连接超时的一种实现方法

    第三步骤是用 select 在指定的超时时间内监听套接字的写就绪事件。如果 select 有监听到,证明连接成功,否则连接失败。 下面是 Linux 环境下的示例代码: ```c #include #include #include #include #include...

    cxf超时设置

    "cxf超时设置"这个主题是关于如何在使用CXF框架时,对网络通信的超时时间进行配置,以优化服务的稳定性和性能。 首先,理解超时的概念至关重要。在计算机网络中,超时是指等待某个操作完成的时间限制。当这个时间...

    如何解决PI超时问题

    - **增加超时时间**:如果初步分析表明是因为超时设置过短导致的问题,则可以考虑适当延长超时时间。 - **优化通信通道配置**:确保通信通道配置正确无误,例如使用正确的协议版本、地址和端口等。 - **提高系统...

    Sql Server数据库超时问题的解决方法

    例如,使用UPDATE STATISTICS语句可以更新要查询表的索引分发统计,保证估计时间的正确性: UPDATE STATISTICS 表名 另外,也可以使用sp_configure语句来设置查询超时: sp_configure 'show advanced options', 1...

    delphi DataSnap连接超时设置无效补丁

    解决问题:delphi D10下(XE8\XE7),DataSnap连接超时设置在android中使用无效,导致不能连接服务器时长时间等待。补丁包带源码及说明。 Datasnap ConnectTimeout android

    Nginx超时设置.docx

    - **proxy_connect_timeout**:与上游服务器建立连接的超时时间。默认值为 60 秒。值得注意的是,这个超时时间不能超过 75 秒。这并非等待后端服务器返回页面的时间,而是指与上游服务器建立连接的时间。 - **proxy...

    C++设置超时时间的简单实现方法

    一个常见的方法是利用操作系统提供的套接字API,尤其是`setsockopt`函数,来设定套接字的超时时间。本篇文章将详细讲解如何在C++中实现这一功能。 `setsockopt`函数是一个用于设置套接字选项的系统调用,它允许我们...

    客户端设置超时时间真的很重要

    例如,我们可以设置 ReadTimeout 和 ConnectTimeout 来控制客户端的超时时间。 ribbon: ReadTimeout: 2000 ConnectTimeout: 2000 这样,如果聚合层调用购物车服务超过两秒钟没有返回结果,客户端将超时报错。这...

    Java编程Webservice指定超时时间代码详解

    反之,如果服务响应较慢或者网络不稳定,就需要设定较长的超时时间,以避免因网络问题导致的调用失败。 值得注意的是,超时时间设置为0表示永不超时,这在某些情况下可能是必要的,但在大多数生产环境中,为了防止...

    在linux下玩转带有超时时间的connect函数

    本文主要介绍了如何在Linux环境下编写一个带有超时时间的`connect()`函数。代码示例中,首先创建了一个套接字`sockClient`,然后填充了服务器的`sockaddr_in`结构体`addrSrv`,包括IP地址和端口号。接着,通过`fcntl...

    端口扫描-connect,select,时间限制

    在上述描述中提到的"加了个连接时间限制",是指在`connect`调用中设置超时时间。这通常通过设置套接字选项`SO_SNDTIMEO`或`SO_RCVTIMEO`来实现。这样做是为了防止在扫描大量端口时因个别慢速响应的端口导致整个扫描...

    java httpclient设置超时时间和代理的方法

    在 Java HTTPClient 中,设置超时时间是非常必要的,因为默认的超时时间很长,可能会影响系统的业务逻辑,例如阻塞系统,影响系统的吞吐量,占用线程数。从 HTTPClient 4.4 版本开始,将这些设置封装到 ...

    EasyConnect不掉线维持 New.rar

    轻松解决EasyConnect频繁掉线的问题,可以设置自动保持、取消保持灯功能,稳定在线,方便好用。

Global site tag (gtag.js) - Google Analytics