- const unsigned char *ptr = reinterpret_cast<const unsigned char *>(&addr);
- string result = format("%d.%d.%d.%d", ptr[0], ptr[1], ptr[2], ptr[3]);
- if(port)
- result += format(":%d", ntohs(port));
- return result;
+ const sockaddr_in &sai = reinterpret_cast<const sockaddr_in &>(sa.addr);
+ addr[0] = sai.sin_addr.s_addr>>24;
+ addr[1] = sai.sin_addr.s_addr>>16;
+ addr[2] = sai.sin_addr.s_addr>>8;
+ addr[3] = sai.sin_addr.s_addr;
+ port = ntohs(sai.sin_port);