#endif
}
+int sk_addrtype(SockAddr addr)
+{
+ return addr->family;
+}
+
+void sk_addrcopy(SockAddr addr, char *buf)
+{
+#ifdef IPV6
+ if (addr->family == AF_INET) {
+#endif
+ struct in_addr a;
+ a.s_addr = htonl(addr->address);
+ memcpy(buf, (char*) &a.s_addr, 4);
+#ifdef IPV6
+ } else {
+ memcpy(buf, (char*) addr->ai, 16);
+ }
+#endif
+}
+
void sk_addr_free(SockAddr addr)
{
sfree(addr);
s->pending_error = err;
return;
} else {
- fatalbox(winsock_error_string(err));
+ logevent(winsock_error_string(err));
+ fatalbox("%s", winsock_error_string(err));
}
} else {
if (s->sending_oob) {
ret = recv(s->s, buf, sizeof(buf), MSG_OOB);
noise_ultralight(ret);
if (ret <= 0) {
- fatalbox(ret == 0 ? "Internal networking trouble" :
- winsock_error_string(WSAGetLastError()));
+ char *str = (ret == 0 ? "Internal networking trouble" :
+ winsock_error_string(WSAGetLastError()));
+ logevent(str);
+ fatalbox("%s", str);
} else {
return plug_receive(s->plug, 2, buf, ret);
}