unaligned cast in TCPSocket::Connect

TCPSocket::Connect has this line:

host_str = ::inet_ntoa (*(struct in_addr *)*host_entry->h_addr_list);

host_entry->h_addr_list is a char**, while struct in_addr contains a uint32_t. Casting like this (char * to uint_32t *) could cause a bus error on systems that don’t allow non-aligned loads. I think we need to memcpy the data into a struct in_addr variable.

Anyone have any thoughts on this?

I believe you are correct. We should create an in_addr on the stack and memcpy into it.

fine by me. We should probably also stop using inet_ntoa as it is not
thread-safe (I don't know what is the safe alternative off-hand).


You will have to memcpy into a local that will be correctly aligned before you play with it. Or you can use DataExtractor as it already does the right thing. We ran into similar issues with DWARF parsing on systems that don't allow non-aligned loads, so DataExtractor can extract data correctly no matter what the alignment.