gpt4 book ai didi

c++ - 结构 sockaddr_un : correct initialization

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:11 25 4
gpt4 key购买 nike

几天前,我遇到了一个与struct sockaddr_un 相关的奇怪错误。有关更多信息,请阅读 here .

一段时间后,我也找到了该错误的解决方案,即memset 整个变量。现在我的问题是,正如在那一边的一篇帖子中所提出的,为什么?

为什么我需要将整个本地而不是动态分配的变量设置为 0,即使我已经将每个成员都设置为合法且正确的值?

在其他 struct 中(例如 struct sockaddr_in)是一个变量,用作填充以便在内部看起来与 struct sockaddr 相同 。您必须用 0 填充(或者也许您不必?请纠正我)该变量,以便使程序在任何时候都能正确运行。

此外,我在哪里可以查看源代码,例如 connect() 的源代码?可能是 connect() 函数没有很好地实现?还是我缺少一些基础知识?

提前谢谢你。

最佳答案

来自阅读unix_stream_connect source code似乎没有任何要求将结构归零。我写了一个测试程序,故意用一个值填充结构,其中客户端和服务器传递不同的填充值,并且它们能够很好地相互连接:

void init_addr (struct sockaddr_un *addr, const char *path, int I) {
struct sockaddr_un tmp = { .sun_family = AF_UNIX };
// fill sun_path
memset(tmp.sun_path, I, UNIX_PATH_MAX);
// copy path
snprintf(tmp.sun_path, UNIX_PATH_MAX, "%s", path);
*addr = tmp;
}

可能导致连接失败的是竞争条件,即当客户端尝试连接时服务器尚未完成设置。

关于c++ - 结构 sockaddr_un : correct initialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11809588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com