/*
- * Copyright 2014 Facebook, Inc.
+ * Copyright 2015 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <errno.h>
#include <sstream>
#include <string>
-#include <execinfo.h>
-#include <stdio.h>
-#include <stdlib.h>
namespace {
setFromAddrInfo(results.info);
}
+void SocketAddress::setFromIpAddrPort(const IPAddress& ipAddr, uint16_t port) {
+ if (external_) {
+ storage_.un.free();
+ external_ = false;
+ }
+ storage_.addr = ipAddr;
+ port_ = port;
+}
+
void SocketAddress::setFromLocalPort(uint16_t port) {
ScopedAddrInfo results(getAddrInfo(nullptr, port, AI_ADDRCONFIG));
setFromLocalAddr(results.info);
}
}
-void SocketAddress::setFromPeerAddress(int socket) {
+void SocketAddress::setFromPeerAddress(SocketDesc socket) {
setFromSocket(socket, getpeername);
}
-void SocketAddress::setFromLocalAddress(int socket) {
+void SocketAddress::setFromLocalAddress(SocketDesc socket) {
setFromSocket(socket, getsockname);
}
"SocketAddress::setFromSockaddr() called "
"with unsupported address type");
}
- if (external_) {
- storage_.un.free();
- external_ = false;
- }
- storage_.addr = folly::IPAddress(address);
- port_ = port;
+
+ setFromIpAddrPort(folly::IPAddress(address), port);
}
void SocketAddress::setFromSockaddr(const struct sockaddr* address,
break;
case AF_UNSPEC:
default:
- void *array[20];
- size_t size;
- // get void*'s for all entries on the stack
- size = backtrace(array, 20);
- // print out all the frames to stderr
- fprintf(stderr, "Exception: \n");
- backtrace_symbols_fd(array, size, STDERR_FILENO);
- LOG(FATAL) << "Invalid ip address: " << describe();
throw std::invalid_argument(
"SocketAddress: unsupported address family "
"for hashing");
setFromSockaddr(info->ai_addr, info->ai_addrlen);
}
-void SocketAddress::setFromSocket(int socket,
- int (*fn)(int, sockaddr*, socklen_t*)) {
+void SocketAddress::setFromSocket(SocketDesc socket, GetPeerNameFunc fn) {
// Try to put the address into a local storage buffer.
sockaddr_storage tmp_sock;
socklen_t addrLen = sizeof(tmp_sock);