小编ESR*_*ESR的帖子

如何使用C套接字API侦听所有IPV6地址

我维护GPSD,这是一个广泛部署的开源服务守护进程,可以监控GPS和其他大地测量传感器.它在IPv4和IPv6上侦听端口2947上的客户端应用程序连接.为了安全和隐私,它通常只监听环回地址,但守护进程有一个-G选项,用于使其监听任何地址.

问题:-G选项在IPv4中有效,但我无法弄清楚如何使其与IPv6一起使用.应该基于各种教程示例工作的方法不会产生错误,表明该地址已在使用中.我正在寻求帮助来解决IPv6网络编程经验丰富的人.

相关代码见http://git.berlios.de/cgi-bin/gitweb.cgi?p=gpsd;a=blob;f=gpsd.c;h=ee2156caf03ca23405f57f3e04e9ef306a75686f;hb=HEAD

此代码在IPv4下的-G和非G情况下都能正常运行,因为可以使用netstat -l轻松验证.

现在看看"案例AF_INET6:"之后的第398行.listen_global选项由-G设置; 如果为false,则代码成功.目前有一个以下评论,继承自一个未知的贡献者,如下所示:

/* else */
        /* BAD:  sat.sa_in6.sin6_addr = in6addr_any;
     * the simple assignment will not work (except as an initializer)
     * because sin6_addr is an array not a simple type
     * we could do something like this:
     * memcpy(sat.sa_in6.sin6_addr, in6addr_any, sizeof(sin6_addr));
     * BUT, all zeros is IPv6 wildcard, and we just zeroed the array
     * so really nothing to do here
     */
Run Code Online (Sandbox Code Playgroud)

根据我查找的各种教程示例,分配"sat.sa_in6.sin6_addr = in6addr_any;" (尽管评论)是正确的,它确实编译.但是,使用-G启动时无法声明监听地址已被使用.

作业是"sat.sa_in6.sin6_addr = in6addr_any;" 名义上正确吗?还有什么,如果有的话,我错过了什么?

c ipv6

12
推荐指数
1
解决办法
1万
查看次数

git快速导入流的合并语义是什么?

我编写并维护了一个名为reposurgeon的开源工具,它编辑版本控制存储库历史记录,可用于在VCS之间移动项目历史记录.最近我发送完全支持读取Subversion转储文件和repos.但是有一件事reposurgeon还没有做得很好,那就是通过复制到git风格的DAG合并来翻译Subversion分支合并.

为了使这一部分正确,我需要比git更快地理解git快速导入流中的合并提交的语义.我的问题是关于合并提交后应该看到哪个版本的内容.

当然,附加合并提交的文件修改使其内容可见.我的问题是关于提交没有触及的路径.

  1. 如果路径仅在合并的祖先只有一个提交链上有内容,我认为内容应该是可见的.那是对的吗?

  2. 如果路径在合并中具有多个祖先的提交链中的内容,那么哪个版本可见?

  3. 如果沿着合并的某些路径删除文件,那么什么规则会预测合并修订中何时删除它?

git git-fast-import

7
推荐指数
1
解决办法
647
查看次数

标签 统计

c ×1

git ×1

git-fast-import ×1

ipv6 ×1