[ https://issues.apache.org/jira/browse/ZOOKEEPER-530?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mahadev konar updated ZOOKEEPER-530: ------------------------------------ Resolution: Fixed Release Note: get the c client working with IPV6. Hadoop Flags: [Reviewed] Status: Resolved (was: Patch Available) I just committed this. > Memory corruption: Zookeeper c client IPv6 implementation does not honor > struct sockaddr_in6 size > ------------------------------------------------------------------------------------------------- > > Key: ZOOKEEPER-530 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-530 > Project: Zookeeper > Issue Type: Bug > Components: c client > Affects Versions: 3.2.0, 3.2.1 > Reporter: Isabel Drost > Assignee: Isabel Drost > Fix For: 3.3.0 > > Attachments: ZOOKEEPER-530.patch, ZOOKEEPER-530.patch, > ZOOKEEPER-530_spaces.patch > > > I tried to run zookeeper c-client on a machine with IPv6 enabled. When > connecting to the IPv6 address a connect(...) gave a "Address family not > supported by protocol" error. The reason was, that a few lines earlier, the > socket was opened with PF_INET instead of PF_INET6. Changing that the > following way: > {code} > if (zh->addrs[zh->connect_index].sa_family == AF_INET) { > zh->fd = socket(PF_INET, SOCK_STREAM, 0); > } else { > zh->fd = socket(PF_INET6, SOCK_STREAM, 0); > } > {code} > turned the error message into "Invalid argument". > When printing out sizeof(struct sockaddr), sizeof(struct sockaddr_in) and > sizeof(struct sockaddr_in6) I got sockaddr: 16, sockaddr_in: 16 and > sockaddr_in6: 28. > So in the code calling > {code} > connect(zh->fd, &zh->addrs[zh->connect_index], sizeof(struct > sockaddr_in)); > {code} > the parameter address_len is too small. > Same applies to how IPv6 addresses are handled in the function > getaddrs(zhandle_t *zh). > (Big Thanks+kiss to Thilo Fromm for helping me debug this.) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.