I was working on testing the zeromq rsyslog plugins against zeromq 3.1
today, and noticed I can no longer compile the libzmq master branch from
head.  I wasn't sure if this was a known issue or not so figured I'd hit
the list before filing it as a bug.

I'm building libzmq master checked out this morning, on Centos 6.2.  Here's
the error:

  CXX    libzmq_la-tcp_listener.lo
cc1plus: warnings being treated as errors
tcp_listener.cpp: In member function ‘int
zmq::tcp_listener_t::get_address(std::string*)’:
tcp_listener.cpp:148: error: dereferencing pointer ‘sa.120’ does break
strict-aliasing rules
tcp_listener.cpp:148: note: initialized from here
make[2]: *** [libzmq_la-tcp_listener.lo] Error 1
make[2]: Leaving directory `/home/bknox/src/libzmq/src'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/bknox/src/libzmq/src'
make: *** [all-recursive] Error 1

When I diff  tcp_listener.cpp against zeromq-libzmq-75c5b67 (which does
build), I get this:

[bknox@centos1 src]$ diff tcp_listener.cpp
../../zeromq-libzmq-75c5b67/src/tcp_listener.cpp
25d24
< #include <sstream>
103c102
<         options, NULL);
---
>         options, NULL, NULL);
123,157d121
< int zmq::tcp_listener_t::get_address (std::string *addr_)
< {
<     struct sockaddr sa;
<     char host[INET6_ADDRSTRLEN];
<     char serv_info[32];
<     int port, rc;
<     std::stringstream portnum;
<
<     // Get the details of the TCP socket
<     socklen_t sl = sizeof(sockaddr);
<     rc = getsockname (s, &sa, &sl);
<     if (rc != 0) {
<         return rc;
<     }
<
<     // Split the retrieval between IPv4 and v6 addresses
<     if ( sa.sa_family == AF_INET ) {
<         getnameinfo(&sa, sizeof(struct sockaddr), host, INET6_ADDRSTRLEN,
serv_info, 32, NI_NUMERICHOST);
<         port = ntohs( ((struct sockaddr_in *)&sa)->sin_port);
<         portnum << port;
<
<         // Store the address for retrieval by users using wildcards
<         *addr_ = std::string("tcp://") + std::string(host) +
std::string(":") + portnum.str();
<     } else {
<         getnameinfo(&sa, sizeof(struct sockaddr), host, INET6_ADDRSTRLEN,
serv_info, 32, NI_NUMERICHOST);
<         port = ntohs( ((struct sockaddr_in6 *)&sa)->sin6_port);
<         portnum << port;
<
<         // Store the address for retrieval by users using wildcards
<         *addr_ = std::string("tcp://[") + std::string(host) +
std::string("]:") + portnum.str();
<     }
<
<     return 0;
< }
<
207d170
<

B
_______________________________________________
zeromq-dev mailing list
zeromq-dev@lists.zeromq.org
http://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to