[zeromq-dev] HP-UX compile.

Martin Sustrik sustrik at fastmq.com
Tue Nov 18 10:58:10 CET 2008


George,

>> We don't have HP-UX here so it would be helpful if you can check following
>> changes and let us know whether they help to get rid of the warnings:
>>
>>> "/home/gneill/zmq/trunk/zmq/ip.cpp", line 205: warning #4232-D: conversion
>>>          from "sockaddr *" to a more strictly aligned type "sockaddr_in *"
>>>          may cause misaligned access
>>>      *addr_ = *((sockaddr_in *) res->ai_addr);
>> Copying the memory explicitly may help here:
>>
>> memcpy (addr_, res->ai_addr, sizeof (sockaddr_in));
> 
> Yes this resolves the warning, but probably should be sockaddr (not
> sockaddr_in),
> 
> -     *addr_ = *((sockaddr_in *) res->ai_addr);
> +    memcpy(addr_, res->ai_addr, sizeof(struct sockaddr));

According to POSIX specs, sockaddr should never be used directly (it 
should be used only as pointer, a handle to a generic socket address, 
it's used instead of more appropriate void* for historical reasons - 
because it predates ANSI C specs). So when dealing with IPv4 address 
proper, sockaddr_in should be OK.

>>> "/home/gneill/zmq/trunk/zmq/select_thread.cpp", line 243: warning #2940-D:
>>>          missing return statement at end of non-void function
>>>          "zmq::select_thread_t::process_command"
>>>  }
>> I would say the compiler doesn't recognise "assert (false)" as a termination
>> statement. Try this:
>>
>> default:
>>    assert (false);
>>    return false;
> 
> This also resolves the warning.

Ok. Fixed.

Martin



More information about the zeromq-dev mailing list