TCP连接端口释放后立即就可以被再次使

TCP,先调用close()的一方会进入TIME_WAIT状态
SO_REUSEADDR
一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用

SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用

server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项

bool    CSocketEx::Create(const int nAf, const int nSocketType, const int nProtocol, const int nTimeS, const int nTimeR)
{

    if(m_hSocket != -1)
        return false ;

    m_hSocket = socket(nAf,nSocketType,nProtocol);
    if (m_hSocket !=-1)
    {
        struct timeval tv;
        tv.tv_usec = 0;
        tv.tv_sec = nTimeS;
        if (setsockopt(m_hSocket, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)) < 0)
            return false;

        tv.tv_sec = nTimeR;

        if (setsockopt(m_hSocket, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) < 0)
            return false;       
        
        int option = 1;

        if (setsockopt(m_hSocket, SOL_SOCKET, SO_REUSEADDR, &option, sizeof(option)) < 0)
            return false;

        
        return true ;
    }
    return false;   
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。