Tag: berkeley socket

将套接字绑定到IPv6地址

我正在尝试编写一个侦听IPv4和IPv6地址的Web服务器。 但是,我最初写的代码不起作用。 然后我发现IPv6结构适用于IPv4和IPv6。 所以现在我使用IPv6结构,但只有IPv4地址才有效。 这篇post, 为什么我不能将ipv6 socket绑定到linklocal地址 ,后面说要添加server.sin6_scope_id = 5; 所以我这样做但它仍然不接受IPv6 telnet连接。 任何帮助将不胜感激,因为我彻底难过。 谢谢! 我的代码如下: void initialize_server(int port, int connections, char* address) { struct sockaddr_in6 socket_struct; /*Creates the socket*/ if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { syslog(LOG_ERR, "%s\n", strerror(errno)); exit(EXIT_FAILURE); }/*Ends the socket creation*/ /*Populates the socket address structure*/ socket_struct.sin6_family = AF_INET6; if(address […]

如何忽略自己的广播udp数据包

对于以下我假设一张网卡。 我有一个程序的组件,旨在让子网中的其他人知道它的存在。 为此,我实现了一个解决方案,无论何时程序启动(以及之后定期)它都会向INADDR_BROADCAST发送广播 – 无论谁收听所需的端口,都会记住它来自哪里供以后使用。 这个问题是我不想记住我自己的广播。 我认为理论上这很容易做 – 只需找出本地ip并与recvfrom内容进行比较。 但是,我发现很难获得本地IP:带有NULL的getaddrinfo返回127.0.0.1 ,带有主机名的getaddrinfo返回公共IP。 任何人都可以指向我找到实际的子网IP的方向? 我想我必须错过一些非常明显的东西但是……我还是错过了:) 注意:我已经阅读了有关广播的其他SO问题,特别是这一个: 所有接口上的UDP-Broadcast,但我尚未解决多接口问题。