非阻塞connect流程

来源:互联网 发布:it helpdesk面试问题 编辑:程序博客网 时间:2024/05/17 02:07

1. create a socket

2.set noblock

3.connect

    if (connect(pItor->socket, (struct sockaddr *) &server, sizeof(server)) == -1)
    {        
        if(errno == EINPROGRESS)
        {
            pItor->connecttime = time(NULL);
            pItor->state = ALARMSRV_PROC_STATE_CONNECTING;
        }
        else
        {
            //error
            goto EXIT0;
        }
    }

4.if timeout

             now = time(NULL);
             if(abs(now - pItor->connecttime) < ALARM_CONNECT_TIME_OUT)
             {
                len = sizeof(int);
                if(getsockopt(pItor->socket, SOL_SOCKET, SO_ERROR, &error, (socklen_t *) &len) == 0)
                {
                    if(error == 0)
                    {
                        pItor->state = ALARMSRV_PROC_STATE_START;
                        break;
                    }
                }
             }

原创粉丝点击