mirror of
https://github.com/mtheall/ftpd.git
synced 2025-06-18 11:05:52 -04:00
Fix PORT
This commit is contained in:
parent
365945d7e8
commit
fd9980ffce
@ -57,36 +57,39 @@ public:
|
||||
/// \param that_ Object to move from
|
||||
SockAddr &operator= (SockAddr &&that_);
|
||||
|
||||
/// \param Parameterized constructor
|
||||
/// \brief Parameterized constructor
|
||||
/// \param addr_ Address
|
||||
SockAddr (struct sockaddr_in const &addr_);
|
||||
|
||||
#ifndef NO_IPV6
|
||||
/// \param Parameterized constructor
|
||||
/// \brief Parameterized constructor
|
||||
/// \param addr_ Address
|
||||
SockAddr (struct sockaddr_in6 const &addr_);
|
||||
#endif
|
||||
|
||||
/// \param Parameterized constructor
|
||||
/// \brief Parameterized constructor
|
||||
/// \param addr_ Address
|
||||
SockAddr (struct sockaddr_storage const &addr_);
|
||||
|
||||
/// \param sockaddr_in cast operator
|
||||
/// \brief sockaddr_in cast operator
|
||||
operator struct sockaddr_in const & () const;
|
||||
|
||||
#ifndef NO_IPV6
|
||||
/// \param sockaddr_in6 cast operator
|
||||
/// \brief sockaddr_in6 cast operator
|
||||
operator struct sockaddr_in6 const & () const;
|
||||
#endif
|
||||
|
||||
/// \param sockaddr_storage cast operator
|
||||
/// \brief sockaddr_storage cast operator
|
||||
operator struct sockaddr_storage const & () const;
|
||||
|
||||
/// \param sockaddr* cast operator
|
||||
/// \brief sockaddr* cast operator
|
||||
operator struct sockaddr * ();
|
||||
/// \param sockaddr const* cast operator
|
||||
/// \brief sockaddr const* cast operator
|
||||
operator struct sockaddr const * () const;
|
||||
|
||||
/// \brief sockaddr size
|
||||
socklen_t size () const;
|
||||
|
||||
/// \brief Address port
|
||||
std::uint16_t port () const;
|
||||
|
||||
|
@ -124,6 +124,23 @@ bool SockAddr::setPort (std::uint16_t const port_)
|
||||
}
|
||||
}
|
||||
|
||||
socklen_t SockAddr::size () const
|
||||
{
|
||||
switch (m_addr.ss_family)
|
||||
{
|
||||
case AF_INET:
|
||||
return sizeof (struct sockaddr_in);
|
||||
|
||||
#ifndef NO_IPV6
|
||||
case AF_INET6:
|
||||
return sizeof (struct sockaddr_in6);
|
||||
#endif
|
||||
|
||||
default:
|
||||
std::abort ();
|
||||
}
|
||||
}
|
||||
|
||||
std::uint16_t SockAddr::port () const
|
||||
{
|
||||
switch (m_addr.ss_family)
|
||||
|
@ -3,7 +3,7 @@
|
||||
// - RFC 3659 (https://tools.ietf.org/html/rfc3659)
|
||||
// - suggested implementation details from https://cr.yp.to/ftp/filesystem.html
|
||||
//
|
||||
// Copyright (C) 2023 Michael Theall
|
||||
// Copyright (C) 2024 Michael Theall
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
@ -95,30 +95,10 @@ int Socket::atMark ()
|
||||
|
||||
bool Socket::bind (SockAddr const &addr_)
|
||||
{
|
||||
switch (static_cast<struct sockaddr_storage const &> (addr_).ss_family)
|
||||
if (::bind (m_fd, addr_, addr_.size ()) != 0)
|
||||
{
|
||||
case AF_INET:
|
||||
if (::bind (m_fd, addr_, sizeof (struct sockaddr_in)) != 0)
|
||||
{
|
||||
error ("bind: %s\n", std::strerror (errno));
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
#ifndef NO_IPV6
|
||||
case AF_INET6:
|
||||
if (::bind (m_fd, addr_, sizeof (struct sockaddr_in6)) != 0)
|
||||
{
|
||||
error ("bind: %s\n", std::strerror (errno));
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
errno = EINVAL;
|
||||
error ("bind: %s\n", std::strerror (errno));
|
||||
break;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (addr_.port () == 0)
|
||||
@ -136,7 +116,7 @@ bool Socket::bind (SockAddr const &addr_)
|
||||
|
||||
bool Socket::connect (SockAddr const &addr_)
|
||||
{
|
||||
if (::connect (m_fd, addr_, sizeof (struct sockaddr_storage)) != 0)
|
||||
if (::connect (m_fd, addr_, addr_.size ()) != 0)
|
||||
{
|
||||
if (errno != EINPROGRESS)
|
||||
error ("connect: %s\n", std::strerror (errno));
|
||||
|
Loading…
Reference in New Issue
Block a user