summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core/ConnectionFileDescriptor.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2011-07-19 16:44:54 +0000
committerGreg Clayton <gclayton@apple.com>2011-07-19 16:44:54 +0000
commitad440da346754a1a734dcd42714ea39970ffc2db (patch)
tree4d8f6de7dde3d9ff618b89ed6c5065a26eac181a /lldb/source/Core/ConnectionFileDescriptor.cpp
parent7ac472e22adb4b772f180ed3e8fbff35381bbc80 (diff)
downloadbcm5719-llvm-ad440da346754a1a734dcd42714ea39970ffc2db.tar.gz
bcm5719-llvm-ad440da346754a1a734dcd42714ea39970ffc2db.zip
Abstract "struct sockaddr", "struct sockaddr_in", "struct sockaddr_in6" and
"struct sockaddr_storage" into a new host class called SocketAddress. This will allow us to control the host specific implementations (such as how to get the length) into a single Host specific class. llvm-svn: 135488
Diffstat (limited to 'lldb/source/Core/ConnectionFileDescriptor.cpp')
-rw-r--r--lldb/source/Core/ConnectionFileDescriptor.cpp36
1 files changed, 13 insertions, 23 deletions
diff --git a/lldb/source/Core/ConnectionFileDescriptor.cpp b/lldb/source/Core/ConnectionFileDescriptor.cpp
index 7d221499794..1e749371923 100644
--- a/lldb/source/Core/ConnectionFileDescriptor.cpp
+++ b/lldb/source/Core/ConnectionFileDescriptor.cpp
@@ -71,11 +71,10 @@ ConnectionFileDescriptor::ConnectionFileDescriptor () :
m_fd_recv (-1),
m_fd_send_type (eFDTypeFile),
m_fd_recv_type (eFDTypeFile),
+ m_udp_send_sockaddr (),
m_should_close_fd (false),
m_socket_timeout_usec(0)
{
- memset (&m_udp_send_sockaddr, 0, sizeof(m_udp_send_sockaddr));
-
LogSP log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_CONNECTION | LIBLLDB_LOG_OBJECT));
if (log)
log->Printf ("%p ConnectionFileDescriptor::ConnectionFileDescriptor ()", this);
@@ -87,10 +86,10 @@ ConnectionFileDescriptor::ConnectionFileDescriptor (int fd, bool owns_fd) :
m_fd_recv (fd),
m_fd_send_type (eFDTypeFile),
m_fd_recv_type (eFDTypeFile),
+ m_udp_send_sockaddr (),
m_should_close_fd (owns_fd),
m_socket_timeout_usec(0)
{
- memset (&m_udp_send_sockaddr, 0, sizeof(m_udp_send_sockaddr));
LogSP log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_CONNECTION | LIBLLDB_LOG_OBJECT));
if (log)
log->Printf ("%p ConnectionFileDescriptor::ConnectionFileDescriptor (fd = %i, owns_fd = %i)", this, fd, owns_fd);
@@ -285,8 +284,8 @@ ConnectionFileDescriptor::Read (void *dst,
if (SetSocketReceiveTimeout (timeout_usec))
{
status = eConnectionStatusSuccess;
- sockaddr_t from = m_udp_send_sockaddr;
- socklen_t from_len = m_udp_send_sockaddr.sa.sa_len;
+ SocketAddress from (m_udp_send_sockaddr);
+ socklen_t from_len = m_udp_send_sockaddr.GetLength();
bytes_read = ::recvfrom (m_fd_recv, dst, dst_len, 0, (struct sockaddr *)&from, &from_len);
}
break;
@@ -401,13 +400,13 @@ ConnectionFileDescriptor::Write (const void *src, size_t src_len, ConnectionStat
break;
case eFDTypeSocketUDP: // Unconnected UDP socket requiring sendto/recvfrom
- assert (m_udp_send_sockaddr.sa_storage.ss_family != 0);
+ assert (m_udp_send_sockaddr.GetFamily() != 0);
bytes_sent = ::sendto (m_fd_send,
src,
src_len,
0,
- &m_udp_send_sockaddr.sa,
- m_udp_send_sockaddr.sa.sa_len);
+ m_udp_send_sockaddr,
+ m_udp_send_sockaddr.GetLength());
break;
}
@@ -896,10 +895,7 @@ ConnectionFileDescriptor::ConnectUDP (const char *host_and_port, Error *error_pt
if (m_fd_send != -1)
{
- ::memset (&m_udp_send_sockaddr, 0, sizeof(m_udp_send_sockaddr));
- ::memcpy (&m_udp_send_sockaddr,
- service_info_ptr->ai_addr,
- service_info_ptr->ai_addrlen);
+ m_udp_send_sockaddr = service_info_ptr;
break;
}
else
@@ -977,18 +973,12 @@ in_port_t
ConnectionFileDescriptor::GetSocketPort (int fd)
{
// We bound to port zero, so we need to figure out which port we actually bound to
- sockaddr_t sock_addr;
- socklen_t sock_addr_len = sizeof (sock_addr);
- if (::getsockname (fd, &sock_addr.sa, &sock_addr_len) == 0)
- {
- switch (sock_addr.sa.sa_family)
- {
- case AF_INET: return sock_addr.sa_ipv4.sin_port;
- case AF_INET6: return sock_addr.sa_ipv6.sin6_port;
- }
- }
- return 0;
+ SocketAddress sock_addr;
+ socklen_t sock_addr_len = sock_addr.GetMaxLength ();
+ if (::getsockname (fd, sock_addr, &sock_addr_len) == 0)
+ return sock_addr.GetPort ();
+ return 0;
}
// If the read file descriptor is a socket, then return
OpenPOWER on IntegriCloud