--- gui/simple-chooser/gdm-host-chooser-widget.c.orig 2009-02-19 21:45:09.000000000 -0500
+++ gui/simple-chooser/gdm-host-chooser-widget.c 2009-05-11 02:34:20.000000000 -0400
@@ -311,7 +311,7 @@ do_ping (GdmHostChooserWidget *widget,
res = XdmcpFlush (widget->priv->socket_fd,
&widget->priv->broadcast_buf,
(XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address),
- (int)sizeof (struct sockaddr_storage));
+ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (address)));
if (! res) {
g_warning ("Unable to flush the XDMCP broadcast packet: %s", g_strerror (errno));
}
@@ -328,7 +328,7 @@ do_ping (GdmHostChooserWidget *widget,
res = XdmcpFlush (widget->priv->socket_fd,
&widget->priv->query_buf,
(XdmcpNetaddr)gdm_address_peek_sockaddr_storage (address),
- (int)sizeof (struct sockaddr_storage));
+ (int)gdm_sockaddr_len (gdm_address_peek_sockaddr_storage (address)));
if (! res) {
g_warning ("Unable to flush the XDMCP query packet");
}
@@ -442,7 +442,7 @@ find_broadcast_addresses (GdmHostChooser
/* paranoia */
ifreq.ifr_name[sizeof (ifreq.ifr_name) - 1] = '\0';
- if (ioctl (sock, SIOCGIFFLAGS, &ifreq) < 0) {
+ if ((ioctl (sock, SIOCGIFFLAGS, &ifreq) < 0) && (errno != ENXIO)) {
g_warning ("Could not get SIOCGIFFLAGS for %s", ifr[i].ifr_name);
}
@@ -542,6 +542,8 @@ xdmcp_init (GdmHostChooserWidget *widget
#ifdef ENABLE_IPV6
widget->priv->socket_fd = socket (AF_INET6, SOCK_DGRAM, 0);
if (widget->priv->socket_fd != -1) {
+ int off = 0;
+ setsockopt(widget->priv->socket_fd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&off, sizeof (off));
widget->priv->have_ipv6 = TRUE;
}
#endif