您当前的位置: 首页 > 

小生叫安辰

暂无认证

  • 5浏览

    0关注

    105博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

鸿蒙源码分析(五)

小生叫安辰 发布时间:2021-07-31 13:02:28 ,浏览量:5

tcp_socket.c代码分析

本篇主要分析模块一中trans_service目录下tcp_socket.c代码。 文件路径(模块一\communication_softbus_lite- master\trans_service\source\utils\message.c)

一、背景知识

tcp_soclet相关理论知识已经在上一篇博客中详细解释。 传送门:点击查看tcp_socket理论篇

二、代码分析

1. 相关宏定义

#define SEND_BUF_SIZE           0x200000 //发送缓冲区的大小
#define RECV_BUF_SIZE           0x100000 //接受缓冲区的大小
#define USER_TIMEOUT_MS         5000 //用户暂停时间
#define DEFAULT_SEND_TIMEOUT    200//默认的发送时间阈值

2. 端口相关函数 2.1 端口复用函数SetReuseAddr(int fd, int on) 参数详解:

  • fd :对应的文件描述符
  • on:对于setsockopt(),指向包含新选项值的缓冲。
static int SetReuseAddr(int fd, int on)
{
    int rc = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
    //setsockopt函数用来获取或者设置与某个套接字关联的选项。传入参数分别为
    //成功执行时候返回零,失败返回-1
    if (rc != 0) {
        SOFTBUS_PRINT("[TRANS] SetReuseAddr fail\n");
        return -1;//setsockopt执行失败则函数推出并返回-1
    }
    return 0;
}

2.2 SetNoDelay(int fd, int on)

static int SetNoDelay(int fd, int on)
//tcp_nodelay该算法要求一个TCP连接上最多只能有一个未被确认的小分组,在该小分组的确认到来之前,不能发送其他小分组。
{
    int rc = setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
	//setsockopt函数用来获取或者设置与某个套接字关联的选项。传入参数分别为
    //成功执行时候返回零,失败返回-1
    if (rc != 0) {
        SOFTBUS_PRINT("[TRANS] SetNoDelay fail\n");
        return -1;//setsockopt执行失败则函数推出并返回-1
    }
    return 0;
}

3. tcp_server相关函数 3.1 设置服务选项函数SetServerOption(int fd)

static void SetServerOption(int fd)
{
    SetReuseAddr(fd, 1);
    SetNoDelay(fd, 1);
}

3.2打开服务器函数 这个函数OpenTcpServer(const char *ip, uint16_t port)传入ip和对应端口号来打开相关服务器。

sockaddr_in是系统封装的一个结构体,具体包含了成员变量:sin_family、sin_addr、sin_zero。

typedef struct sockaddr_in {
 
#if(_WIN32_WINNT             
关注
打赏
1635606302
查看更多评论
0.0736s