使用 sockaddr_in 的值填充 sockaddr_storage 结构

2023-12-09

我有一个sockaddr_storage对象,我需要用用户提供的值填充它。请注意,用户可以提供其中之一AF_INET or AF_INET6作为填充结构的域。


void fill(sockaddr_storage &addrStruct, int domain,
      const char addr[], const int port)
{
    std::memset(&addrStruct, 0, sizeof(addrStruct));

    switch(domain) {

        case AF_INET: addrStruct.sin_family = AF_INET;
                      addrStruct.sin_port= htons(port);

                      inet_pton(AF_INET, addr, addrStruct.sin_addr);

        case AF_INET6: ....
        ....
        ....
        default: ....
    }
}

很确定这行不通,因为addrStruct属于类型struct sockaddr_storage这些成员出现在struct sockaddr_in。我也尝试过static_cast<sockaddr_in>(addrStruct).sin_port和类似的,但这又不起作用。那么我应该如何填充这个结构,以便它保持有效值,同时尊重铸造结构的对齐。


您需要首先使用适当的地址结构,然后填写:

struct sockaddr_in sin;

sin.sin_family = AF_INET;
sin.sin_port= htons(port);

然后,当你完成之后,memcpy()它进入sockaddr_storage:

memcpy(reinterpret_cast<char *>(&addrStruct),
       reinterpret_cast<char *>(&sin), sizeof(sin));

请注意,您仍然应该将全部清零sockaddr_storage事先缓冲,就像你所做的那样。

另一种方法是定义您自己的union所有地址结构,包括sockaddr_storage,然后初始化适当的union member.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 sockaddr_in 的值填充 sockaddr_storage 结构 的相关文章

  • CodeLite 配色方案(主题)对于 C 来说很混乱

    我最近将 CodeLite for Linux Debian 更新到版本 14 0 我主要将 CodeLite 用于 C 看起来 IDE 搞乱了颜色主题 这里我有之前 CodeLite 13 0 https i stack imgur co
  • 将 Google 云端硬盘访问权限委派给服务帐户失败

    我参与构建了一个内部使用的应用程序 用户可以通过该应用程序上传文件 并将其存储在 Google Drive 中 由于建议不要使用服务帐户作为文件所有者 因此我希望代表公司系统管理员有权访问的指定用户帐户上传应用程序 我已经创建了该应用程序以
  • pop() 期间提升 Fibonacci 堆访问冲突

    Context 我目前正在实现某种形式的 A 算法 我决定使用 boost 的斐波那契堆作为底层优先级队列 我的图表是在算法运行时构建的 作为我使用的顶点对象 class Vertex public Vertex double double
  • 在 Windows 应用商店应用程序 (Win 8.1) 中使用 MIDI

    我的目标是在 Windows 应用商店应用程序中接收 MIDI 消息 微软提供了一个名为Microsoft WindowsPreview MidiRT 作为 nuget 包 我设法获得了 MIDI 端口 但是MessageReceived尽
  • 替换大字符串中的多个字符串的最快方法

    我正在寻找替换大 1mb 字符串的多个 500 子字符串的最快方法 无论我尝试过什么 String Replace 似乎都是最快的方法 我只关心最快的方式 不是代码的可读性 可维护性等 我不在乎是否需要使用不安全的代码或预处理原始字符串 每
  • C++ 局部变量销毁顺序

    C 11 中是否存在局部变量释放的定义顺序 更简洁地说 同一作用域中两个局部变量的析构函数的副作用将以什么顺序变得可见 e g struct X X do something int main X x1 X x2 return 0 Is x
  • C# 中的 memcpy 函数 [重复]

    这个问题在这里已经有答案了 可能的重复 C memcpy 等效项 https stackoverflow com questions 510971 c memcpy equivalent 相当于什么memcpyC 中的函数 正如已经说过的
  • C++ 中的结构填充

    如果我有一个struct在 C 中 有没有办法安全地将其读 写到跨平台 编译器兼容的文件中 因为如果我理解正确的话 每个编译器都会根据目标平台进行不同的 填充 不 那是不可能的 这是因为C 在二进制层面缺乏标准化 Don Box http
  • “#include ”导致“错误:asm/io.h:没有这样的文件或目录”

    我正在使用 gentoo 并尝试编译一个程序来控制并行端口上的位 它的顶部附近有这一行 include
  • Linux 相当于 GetCommandLine 和 CommandLineToArgv?

    我想知道是否有一些 API 可以在 Linux 上获取当前进程的命令行参数 我想我是非常不清楚的 该问题的真正目的是通过命令行参数传递 unicode 文件名 从文件中读取 proc self cmdline 例如 wallyk zf od
  • 对双向链表进行排序 C++

    尝试通过遍历列表的循环来完成此操作 在循环中 我将头节点输入到我定义的排序函数中 然后使用 strcmp 来确定节点中的哪个名称是否应该排在前面 它不起作用 因为写得太早了 我通过一次沿着列表一个节点进行线性比较 而不是回去查看第一个节点是
  • 网页上的富文本编辑器

    我正在尝试在我的网页中添加一个富文本编辑器 用户可以在其中撰写评论并格式化他们所写的内容 类似于我们在此网站上撰写帖子的编辑器 谁能指出我关于此的正确方向 任何可以帮助我构建这样一个组件的教程 我还想要一个免费的产品 忘记之前提到 类似的东
  • 查询 XmlDocument 而不会出现“命名空间前缀未定义”问题

    我有一个 Xml 文档 它定义并引用了一些命名空间 我将其加载到 XmlDocument 对象中 据我所知 我创建了一个 XmlNamespaceManager 对象 用于查询 Xpath 问题是我收到命名空间 my 未定义的 XPath
  • 检测非 DPI 感知应用程序是否已扩展/虚拟化

    我正在尝试在 WinForms 应用程序中检测它是否由于操作系统具有高 DPI 而以缩放 虚拟化模式启动 目前 在以 3840x2400 缩放 200 缩放运行的系统中 应用程序将分辨率视为 1920x1200 DPI 为 96 缩放因子为
  • Docker 在 VS 中运行,但发布到 AWS 时出错?错误 CS5001:程序不包含适合入口点的静态“Main”方法

    我安装了适用于 Visual Studio 2017 V15 7 3 的 AWS 工具包 并使用 API 模板和 Linux docker 支持创建了一个新的空 Asp Net core 2 1 项目 我可以在 Visual Studio
  • 使用二维动态数组编写一个类

    我有一个家庭作业 我并不是在寻找任何人为我做这项工作 我只是在一个小方面遇到了麻烦 尽管我也接受其他方面的建议 任务是 使用二维动态数组编写一个类 构造函数传入数组的维度 构造函数还将动态数组中的所有值初始化为行索引乘以列索引 交换二维数组
  • 如何在 JSON 输出上强制采用 ISO 格式“YYYY-MM-DDThh:mm:ss.sss”?

    我有一个 ASP NET WebApi2 api 它返回一些 JSON 格式的时间戳 时间戳具有毫秒分辨率 通常我会得到这种格式的时间戳 这很好 YYYY MM DDThh mm ss sss 不幸的是 如果时间戳恰好用整秒对日期进行编码
  • Action 的通用约束未按预期工作

    我无法理解为什么以下代码片段没有给我错误 public void SomeMethod
  • 如何获取字典元素的相对位置?

    我有下一个 C 代码 Dictionary
  • 在 Angular 6 和 ASP.net 中启用 CORS

    我正在尝试从 Angular 6 应用程序向发送电子邮件的 API 发送 POST 请求 我用邮递员测试了该请求并且它有效 但是当我在 Angular 应用程序中执行 POST 请求时 我的控制台中出现错误 我在 Angular 应用程序中

随机推荐

  • Promise.resolve 与解决

    我有这个代码 var promise1 new Promise function resolve reject setTimeout gt console warn Elo resolve First response 1000 promi
  • 我可以通过主机名从 Kubernetes 中另一个节点上运行的另一个容器访问该容器吗?

    我相信我的问题很简单 我正在执行在裸机上安装 Kubernetes 集群的先决条件 假设我有 master Docker DB 容器的主机名固定在第一个节点上 slave Docker DB 容器的主机名固定在第二个节点上 我可以与mast
  • CArrayDataProvider 与 CGridView 分页 Yii

    我正在尝试对 a 进行分页CGridView using CArrayDataProvider my rawData是一个自定义数组 不是来自数据库 模型 因此 在控制器的操作中有以下内容 form new SearchUser here
  • EF Code First 中的计算列

    我需要在数据库中有一列由数据库计算为 行总和 行总和b 我正在使用代码优先模型来创建数据库 我的意思是 public class Income Key public int UserID get set public double inSu
  • 将非对称算法私钥和公钥与 RSA C# 一起使用

    我有两个包含 RSA 私钥和 RSA 公钥的 AsymmetryAlgorithm 对象 私钥是从 Windows MY 密钥库中检索的 公钥是从用户的证书中检索的 如何在 C 中将这些密钥与 RSACryptoServiceProvide
  • 画布内元素中的事件

    我在画布标签内绘制了图像 我如何向其中添加事件 我想在用户单击该图像时执行某些操作 character addEventListener click function alert foo true character is a var im
  • Android 日历提供程序 API 级别

    我们正在开发一个 Android 日历应用程序 问题是我们想要获取其他日历的事件并将我们的事件也分享给他们 据我所知 这是由内容提供商实现的 问题是日历内容提供程序所需的API级别是API 14 我们需要在API 7 Android 2 1
  • CGImageRef 宽度与每行字节数不一致

    我正在尝试从屏幕缓冲区中读取像素 我正在创建一个CGImageRef with CGDisplayCreateImage 但值CGImageGetWidth and CGImageGetBytesPerRow在一起没有意义 将每行字节数除以
  • 如何在sql server中将数字写入word函数[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 如何在 SQL Server 中编写一个函数来以文字形式输出数字 input 1输出 1个 输入 129输出 一百二十九 考虑使用辅助数字表 注意 这个 MS SQL 创建一个序
  • Firebase:setPersistenceEnabled 和 keepSynced 之间有什么区别?

    我一直认为 当我使用以下内容时 所有聊天对话数据都可以随时离线使用 但不知何故不是 所有节点都是从服务器加载的 FirebaseDatabase getInstance setPersistenceEnabled true 然后 根据 DO
  • Swift 广播流媒体 AVPlayer

    我想在 Swift 中从互联网传输音频 但还没有找到正确的功能示例 In Objective C AVPlayerItem playerItem AVPlayerItem playerItemWithURL NSURL URLWithStr
  • 使用 PHP 和 CURL 发出 PUT 请求

    首先 我基于以下假设进行工作 根据 REST 架构 您可以使用 PUT 创建新资源 在我的例子中是一个包含用户提供的附加信息的文件 如果这个概念不正确 请告诉我 这样我就不会从架构的角度提出错误的问题 我发现有两件事与使用 CURL 的 P
  • Python 正则表达式模式 * 未按预期工作

    在工作过程中Google 2010 年 Python 课程 我找到了以下文档 左侧出现 0 次或多次模式 但是当我尝试以下操作时 re search r i biiiiiiiiiiiiiig group 我期望 iiiiiiiiiiiiii
  • jqueryui自动完成限制多项选择

    我正在使用 jQuery UI 自动完成 并试图限制多个结果 基本上 我正在构建一个 PM 系统 我正在使用 收件人 字段的自动完成功能 但我试图限制一条消息可以发送给的人数 因此 将最大选择限制为 25 有什么办法可以限制这个吗 还有关于
  • Android中如何保存RecyclerView的滚动位置?

    我有位于 SwipeRefreshLayout 内部的 Recycler 视图 此外 能够在另一个活动中打开每个项目 返回到 Recycler 后 我需要滚动到所选项目 或滚动到上一个 Y 怎么做 是的 我用谷歌搜索 在 StackOver
  • 如何使用 thymeleaf 序列化 POJO?

    我想在 a 中插入一个 POJO 普通的旧 java 对象 作为普通 Json
  • 使用 AVG() 进行 MySQL 查询时出现问题

    我正在使用一个查询 该查询取每个给定 id 的所有记录的平均值 query SELECT bline id AVG flow as flowavg FROM blf WHERE bline id BETWEEN 1 AND 30 GROUP
  • 将结构放入匿名名称空间有什么作用? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么使用未命名的命名空间以及它们有什么好处 查看某人的代码 这就是他们声明的内容 namespace struct myStruct int x int y obj1 在一个函数中我看到它是这样使用
  • 允许调度程序切换正在执行的线程的机制是什么?

    我知道CPU调度程序使用时间片并让一个线程运行指定的时间 然后切换线程 但我不明白的是CPU如何知道停止执行线程并切换任务 它不能在每条指令后重复检查时钟 对吗 这将花费大量的开销 这将是非常浪费的 我不认为它在线程上使用一些确定性计算来在
  • 使用 sockaddr_in 的值填充 sockaddr_storage 结构

    我有一个sockaddr storage对象 我需要用用户提供的值填充它 请注意 用户可以提供其中之一AF INET or AF INET6作为填充结构的域 void fill sockaddr storage addrStruct int