summaryrefslogtreecommitdiff
path: root/src/SocketCore.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-07-30 14:45:35 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-07-30 14:45:35 +0000
commit7958ce43662d8dd070f2ca71c06ca630198568ef (patch)
tree023ab57b1c8f575ef3b55895447d9bba49474e26 /src/SocketCore.cc
parent20b7c8cd0e058ba74bc311c855db6111726276ef (diff)
2010-07-30 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added FTP EPSV and EPRT command support. aria2 issues these commands when address family of local socket is AF_INET6. * src/FtpConnection.cc * src/FtpConnection.h * src/FtpNegotiationCommand.cc * src/FtpNegotiationCommand.h * src/SocketCore.cc * src/SocketCore.h * test/FtpConnectionTest.cc
Diffstat (limited to 'src/SocketCore.cc')
-rw-r--r--src/SocketCore.cc17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/SocketCore.cc b/src/SocketCore.cc
index cb6602f8..7d8b076b 100644
--- a/src/SocketCore.cc
+++ b/src/SocketCore.cc
@@ -341,11 +341,26 @@ void SocketCore::getAddrInfo(std::pair<std::string, uint16_t>& addrinfo) const
{
struct sockaddr_storage sockaddr;
socklen_t len = sizeof(sockaddr);
+ getAddrInfo(sockaddr, len);
+ addrinfo = util::getNumericNameInfo
+ (reinterpret_cast<const struct sockaddr*>(&sockaddr), len);
+}
+
+void SocketCore::getAddrInfo
+(struct sockaddr_storage& sockaddr, socklen_t& len) const
+{
struct sockaddr* addrp = reinterpret_cast<struct sockaddr*>(&sockaddr);
if(getsockname(sockfd_, addrp, &len) == -1) {
throw DL_ABORT_EX(StringFormat(EX_SOCKET_GET_NAME, errorMsg()).str());
}
- addrinfo = util::getNumericNameInfo(addrp, len);
+}
+
+int SocketCore::getAddressFamily() const
+{
+ struct sockaddr_storage sockaddr;
+ socklen_t len = sizeof(sockaddr);
+ getAddrInfo(sockaddr, len);
+ return sockaddr.ss_family;
}
void SocketCore::getPeerInfo(std::pair<std::string, uint16_t>& peerinfo) const