您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页SRT Channel 源码分析

SRT Channel 源码分析

来源:爱问旅游网

#include "platform_sys.h"

#include "udt.h"

#include "packet.h"

#include "socketconfig.h"

#include "netinet_any.h"

// CChannel 类的私有成员函数,用于创建 socket。

void createSocket(int family);

public:

// 返回当前通道的连接 ID,目前未实现。

std::string CONID() const { return ""; }

// CChannel 类的构造函数。

CChannel();

// CChannel 类的析构函数。

~CChannel();

void open(const sockaddr_any& addr);

// 根据协议族打开一个 UDP 通道。

void open(int family);

// 基于现有的 UDP socket 描述符打开一个 UDP 通道。

void attach(UDPSOCKET udpsock, const sockaddr_any& adr);

// 断开并关闭 UDP 实体。

void close() const;

// 获取 UDP 发送缓冲区大小。

int getSndBufSize();

// 获取 UDP 接收缓冲区大小。

int getRcvBufSize();

void getSockAddr(sockaddr_any& addr) const;

void getPeerAddr(sockaddr_any& addr) const;

int sendto(const sockaddr_any& addr, srt::CPacket& packet, const sockaddr_any& src) const;

EReadStatus recvfrom(sockaddr_any& addr, srt::CPacket& packet) const;

// 设置配置选项。

void setConfig(const CSrtMuxerConfig& config);

// 获取 socket 选项。

void getSocketOption(int level, int sockoptname, char* pw_dataptr, socklen_t& w_len, int& w_status);

// 模板函数,用于获取 socket 选项的值。

template<class Type>

Type sockopt(int level, int sockoptname, Type deflt);

// 获取 IP Time To Live(生存时间)。

int getIpTTL() const;

// 获取 IP Type of Service(服务类型)。

int getIpToS() const;

#ifdef SRT_ENABLE_BINDTODEVICE

// 获取绑定到设备的名称。

bool getBind(char* dst, size_t len);

#endif

// 查询 ioctl 的类型。

int ioctlQuery(int type) const;

// 查询 socket 选项。

int sockoptQuery(int level, int option) const;

const sockaddr* bindAddress();

const sockaddr_any& bindAddressAny();

private:

// 设置 UDP socket 选项。

void setUDPSockOpt();

private:

// socket 描述符。

UDPSOCKET m_iSocket;

// 可变成员,用于缓存原始设置值。

mutable CSrtMuxerConfig m_mcfg;

sockaddr_any m_BindAddr;

//函数注释

// 定义一个名为 set_cloexec 的静态函数,它接受两个整型参数:文件描述符 fd 和一个布尔值 set。

static int set_cloexec(int fd, int set)

{

// 定义一个整型变量 r,用于存储函数的返回值。

int r;

// 循环执行 ioctl 系统调用,直到成功或遇到非 EINTR 错误。

do {

// 调用 ioctl 函数,根据 set 参数的值选择 FIOCLEX 或 FIONCLEX 命令。

// FIOCLEX:设置文件描述符为 close-on-exec,即在 exec 调用后关闭该文件描述符。

// FIONCLEX:取消设置文件描述符的 close-on-exec 属性。

e = ioctl(fd, set ? FIOCLEX : FIONCLEX); //这样创建fd, fork子进程时候会自动close

} while (r == -1 && errno == EINTR)

// 如果 r 不为 0(即 ioctl 调用失败),则返回 errno 值,表示错误原因。

if (r)

return errno;

// 如果成功设置,返回 0 表示成功。

return 0;

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务