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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?