这段代码是一个TCP客户端连接服务器的函数




int CnnctToServerIn(struct sockaddr_in tSvrAddr, int *piCilentFd)
{
    
    
    int iFlag = 1;
    int iRet;
    int iFd = 0;
    struct linger tSoLinger;
    struct timeval tTimeVal;

    iFd = socket(AF_INET, SOCK_STREAM, 0);
    if (iFd <= 0) {
    
    
        DPRINT(DEBUG, "GB:: socket fd = %d, err! reason:%s.", iFd, strerror(errno));
        return FAILURE;
    }

    setsockopt(iFd, IPPROTO_TCP, TCP_NODELAY, (char *)&iFlag, sizeof(iFlag));

    tTimeVal.tv_sec = 2;
    tTimeVal.tv_usec = 0;
    setsockopt(iFd, SOL_SOCKET, SO_SNDTIMEO, (char *)(&tTimeVal), sizeof(tTimeVal));

    tTimeVal.tv_sec = 2;
    tTimeVal.tv_usec = 0;
    setsockopt(iFd, SOL_SOCKET, SO_RCVTIMEO, (char *)(&tTimeVal), sizeof(tTimeVal));

    tSoLinger.l_onoff = 1;
    tSoLinger.l_linger = 0;
    setsockopt(iFd, SOL_SOCKET, SO_LINGER, (char *)(&tSoLinger), sizeof(tSoLinger));

    iRet = connect(iFd, (struct sockaddr *)(&tSvrAddr), sizeof(tSvrAddr));
    if (0 == iRet) {
    
    
        *piCilentFd = iFd;
        return SUCCESS;
    }
    else {
    
    
        close(iFd);
        printf("GB:: Connect to svr inet failed. Reason:%s.\n", strerror(errno));
        return FAILURE;
    }
}






这段代码是一个TCP客户端连接服务器的函数。下面是它的具体步骤:

创建一个套接字(socket),使用 socket(AF_INET, SOCK_STREAM, 0) 函数。
如果创建套接字失败,则返回错误代码 FAILURE。
设置套接字选项 TCP_NODELAY,通过调用 setsockopt(iFd, IPPROTO_TCP, TCP_NODELAY, (char *)&iFlag, sizeof(iFlag)) 来禁用 Nagle 算法,以提高数据传输的实时性。
设置发送超时时间和接收超时时间,通过调用 setsockopt(iFd, SOL_SOCKET, SO_SNDTIMEO, (char *)(&tTimeVal), sizeof(tTimeVal)) 和 setsockopt(iFd, SOL_SOCKET, SO_RCVTIMEO, (char *)(&tTimeVal), sizeof(tTimeVal)) 来设置超时时间为 2 秒。
设置 SO_LINGER 选项,通过调用 setsockopt(iFd, SOL_SOCKET, SO_LINGER, (char *)(&tSoLinger), sizeof(tSoLinger)) 来启用 SO_LINGER 选项,并设置延迟关闭时间为 0 秒。
使用 connect 函数 connect(iFd, (struct sockaddr *)(&tSvrAddr), sizeof(tSvrAddr)) 连接到指定的服务器地址。
如果连接成功(返回值为0),将套接字文件描述符保存在 piCilentFd 指针指向的变量中,并返回成功代码 SUCCESS。
如果连接失败,关闭套接字,并打印连接失败的原因,然后返回失败代码 FAILURE。
这段代码的作用是在指定的服务器地址上建立一个 TCP 连接,并将连接结果保存在 piCilentFd 指针指向的变量中。

猜你喜欢

转载自blog.csdn.net/m0_46376834/article/details/132890079