Remove deprecated rak::socket_address.

This commit is contained in:
Jari Sundell
2025-09-17 14:44:54 +02:00
committed by GitHub
parent 677f8f45c8
commit e7a80c7b18
13 changed files with 100 additions and 905 deletions
+8 -13
View File
@@ -6,9 +6,7 @@
#include <netdb.h>
#include <unistd.h>
#include <rak/file_stat.h>
#include <rak/error_number.h>
#include <rak/path.h>
#include <rak/socket_address.h>
#include <rak/string_manip.h>
#include <rak/regex.h>
#include <torrent/rate.h>
@@ -104,22 +102,19 @@ apply_d_change_link(core::Download* download, const torrent::Object::list_type&
switch (changeType) {
case 0:
if (symlink(target.c_str(), link.c_str()) == -1){
lt_log_print(torrent::LOG_TORRENT_WARN, "create_link failed: %s",
rak::error_number::current().c_str());
}
if (symlink(target.c_str(), link.c_str()) == -1)
lt_log_print(torrent::LOG_TORRENT_WARN, "create_link failed: %s", std::strerror(errno));
break;
case 1:
{
rak::file_stat fileStat;
rak::error_number::clear_global();
errno = 0;
if (!fileStat.update_link(link) || !fileStat.is_link() || unlink(link.c_str()) == -1)
lt_log_print(torrent::LOG_TORRENT_WARN, "delete_link failed: %s", std::strerror(errno));
if (!fileStat.update_link(link) || !fileStat.is_link() ||
unlink(link.c_str()) == -1){
lt_log_print(torrent::LOG_TORRENT_WARN, "delete_link failed: %s",
rak::error_number::current().c_str());
}
break;
}
default:
@@ -137,7 +132,7 @@ apply_d_delete_tied(core::Download* download) {
return torrent::Object();
if (::unlink(rak::path_expand(tie).c_str()) == -1)
control->core()->push_log_std("Could not unlink tied file: " + std::string(rak::error_number::current().c_str()));
control->core()->push_log_std("Could not unlink tied file: " + std::string(std::strerror(errno)));
rpc::call_command("d.tied_to_file.set", std::string(), rpc::make_target(download));
return torrent::Object();
+8 -8
View File
@@ -12,6 +12,7 @@
#include <torrent/download/resource_manager.h>
#include <torrent/net/http_stack.h>
#include <torrent/net/network_config.h>
#include <torrent/net/socket_address.h>
#include <torrent/tracker/tracker.h>
#include <torrent/utils/log.h>
#include <torrent/utils/option_strings.h>
@@ -86,8 +87,7 @@ apply_scgi(const std::string& arg, int type) {
rpc::SCgi* scgi = new rpc::SCgi;
rak::address_info* ai = NULL;
rak::socket_address sa;
rak::socket_address* saPtr;
torrent::sa_unique_ptr sa;
try {
int port, err;
@@ -98,17 +98,17 @@ apply_scgi(const std::string& arg, int type) {
switch (type) {
case 1:
if (std::sscanf(arg.c_str(), ":%i%c", &port, &dummy) == 1) {
sa.sa_inet()->clear();
saPtr = &sa;
sa = torrent::sa_make_inet();
lt_log_print(torrent::LOG_RPC_EVENTS, "SCGI socket is open to any address and is a security risk");
} else if (std::sscanf(arg.c_str(), "%1023[^:]:%i%c", address, &port, &dummy) == 2 ||
std::sscanf(arg.c_str(), "[%64[^]]]:%i%c", address, &port, &dummy) == 2) { // [xx::xx]:port format
if ((err = rak::address_info::get_address_info(address,PF_UNSPEC, SOCK_STREAM, &ai)) != 0)
if ((err = rak::address_info::get_address_info(address, PF_UNSPEC, SOCK_STREAM, &ai)) != 0)
throw torrent::input_error("Could not bind address: " + std::string(rak::address_info::strerror(err)) + ".");
saPtr = ai->address();
sa = torrent::sa_copy(ai->c_addrinfo()->ai_addr);
lt_log_print(torrent::LOG_RPC_EVENTS, "SCGI socket is bound to an address and might be a security risk");
@@ -119,8 +119,8 @@ apply_scgi(const std::string& arg, int type) {
if (port <= 0 || port >= (1 << 16))
throw torrent::input_error("Invalid port number.");
saPtr->set_port(port);
scgi->open_port(saPtr, saPtr->length(), rpc::call_command_value("network.scgi.dont_route"));
torrent::sap_set_port(sa, port);
scgi->open_port(sa.get(), torrent::sap_length(sa), rpc::call_command_value("network.scgi.dont_route"));
break;
+8 -43
View File
@@ -1,45 +1,9 @@
// rTorrent - BitTorrent client
// Copyright (C) 2005-2011, Jari Sundell
//
// 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
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// In addition, as a special exception, the copyright holders give
// permission to link the code of portions of this program with the
// OpenSSL library under certain conditions as described in each
// individual source file, and distribute linked combinations
// including the two.
//
// You must obey the GNU General Public License in all respects for
// all of the code used other than OpenSSL. If you modify file(s)
// with this exception, you may extend this exception to your version
// of the file(s), but you are not obligated to do so. If you do not
// wish to do so, delete this exception statement from your version.
// If you delete this exception statement from all source files in the
// program, then also delete it here.
//
// Contact: Jari Sundell <sundell.software@gmail.com>
#include "config.h"
#include <rak/error_number.h>
#include <rak/path.h>
#include <rak/socket_address.h>
#include <rak/string_manip.h>
#include <torrent/bitfield.h>
#include <torrent/rate.h>
#include <torrent/net/socket_address.h>
#include <torrent/peer/connection_list.h>
#include <torrent/peer/peer.h>
#include <torrent/peer/peer_info.h>
@@ -67,17 +31,18 @@ retrieve_p_id_html(torrent::Peer* peer) {
torrent::Object
retrieve_p_address(torrent::Peer* peer) {
const rak::socket_address *addr = rak::socket_address::cast_from(peer->peer_info()->socket_address());
auto sa = peer->peer_info()->socket_address();
auto addr_str = torrent::sa_addr_str(sa);
if (addr->family() == rak::socket_address::af_inet6)
return "[" + addr->address_str() + "]";
else
return addr->address_str();
if (sa->sa_family == AF_INET6)
return "[" + addr_str + "]";
return addr_str;
}
torrent::Object
retrieve_p_port(torrent::Peer* peer) {
return rak::socket_address::cast_from(peer->peer_info()->socket_address())->port();
return torrent::sa_port(peer->peer_info()->socket_address());
}
torrent::Object
+15 -42
View File
@@ -1,47 +1,14 @@
// rTorrent - BitTorrent client
// Copyright (C) 2005-2011, Jari Sundell
//
// 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
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// In addition, as a special exception, the copyright holders give
// permission to link the code of portions of this program with the
// OpenSSL library under certain conditions as described in each
// individual source file, and distribute linked combinations
// including the two.
//
// You must obey the GNU General Public License in all respects for
// all of the code used other than OpenSSL. If you modify file(s)
// with this exception, you may extend this exception to your version
// of the file(s), but you are not obligated to do so. If you do not
// wish to do so, delete this exception statement from your version.
// If you delete this exception statement from all source files in the
// program, then also delete it here.
//
// Contact: Jari Sundell <sundell.software@gmail.com>
#include "config.h"
#include <cstdio>
#include <rak/address_info.h>
#include <torrent/throttle.h>
#include <torrent/rate.h>
#include <torrent/download/resource_manager.h>
#include <torrent/net/socket_address.h>
#include "core/manager.h"
#include "ui/root.h"
#include "rak/address_info.h"
#include "rpc/parse.h"
#include "rpc/parse_commands.h"
@@ -57,13 +24,16 @@ parse_address_range(const torrent::Object::list_type& args, torrent::Object::lis
rak::address_info* ai;
ret = std::sscanf(itr->as_string().c_str(), "%1023[^/]/%d%c", host, &prefixWidth, &dummy);
if (ret < 1 || rak::address_info::get_address_info(host, PF_INET, SOCK_STREAM, &ai) != 0)
throw torrent::input_error("Could not resolve host.");
uint32_t begin, end;
rak::socket_address sa;
sa.copy(*ai->address(), ai->length());
begin = end = sa.sa_inet()->address_h();
auto sa = torrent::sa_copy(ai->c_addrinfo()->ai_addr);
auto sa_addr = htonl(reinterpret_cast<sockaddr_in*>(sa.get())->sin_addr.s_addr);
begin = end = sa_addr;
rak::address_info::free_address_info(ai);
if (ret == 2) {
@@ -71,18 +41,21 @@ parse_address_range(const torrent::Object::list_type& args, torrent::Object::lis
throw torrent::input_error("Cannot specify both network and range end.");
uint32_t netmask = std::numeric_limits<uint32_t>::max() << (32 - prefixWidth);
if (prefixWidth >= 32 || sa.sa_inet()->address_h() & ~netmask)
if (prefixWidth >= 32 || sa_addr & ~netmask)
throw torrent::input_error("Invalid address/prefix.");
end = sa.sa_inet()->address_h() | ~netmask;
end = sa_addr | ~netmask;
} else if (++itr != args.end()) {
if (rak::address_info::get_address_info(itr->as_string().c_str(), PF_INET, SOCK_STREAM, &ai) != 0)
throw torrent::input_error("Could not resolve host.");
sa.copy(*ai->address(), ai->length());
sa = torrent::sa_copy(ai->c_addrinfo()->ai_addr);
sa_addr = htonl(reinterpret_cast<sockaddr_in*>(sa.get())->sin_addr.s_addr);
rak::address_info::free_address_info(ai);
end = sa.sa_inet()->address_h();
end = sa_addr;
}
// convert to [begin, end) making sure the end doesn't overflow
+12 -8
View File
@@ -7,7 +7,6 @@
#include <unistd.h>
#include <sys/select.h>
#include <rak/address_info.h>
#include <rak/error_number.h>
#include <rak/regex.h>
#include <rak/path.h>
#include <rak/string_manip.h>
@@ -99,7 +98,10 @@ Manager::set_address_throttle(uint32_t begin, uint32_t end, torrent::ThrottlePai
torrent::ThrottlePair
Manager::get_address_throttle(const sockaddr* addr) {
return m_addressThrottles.get(rak::socket_address::cast_from(addr)->sa_inet()->address_h(), torrent::ThrottlePair(nullptr, nullptr));
if (addr->sa_family != AF_INET)
return torrent::ThrottlePair(nullptr, nullptr);
return m_addressThrottles.get(ntohl(reinterpret_cast<const sockaddr_in*>(addr)->sin_addr.s_addr), torrent::ThrottlePair(nullptr, nullptr));
}
int64_t
@@ -182,7 +184,7 @@ Manager::listen_open() {
return;
}
throw torrent::input_error("Could not open/bind port for listening: " + std::string(rak::error_number::current().c_str()));
throw torrent::input_error("Could not open/bind port for listening: " + std::string(std::strerror(errno)));
}
void
@@ -198,12 +200,12 @@ Manager::set_bind_address(const std::string& addr) {
if (torrent::connection_manager()->is_listen_open()) {
torrent::connection_manager()->listen_close();
torrent::config::network_config()->set_bind_address(ai->address()->c_sockaddr());
torrent::config::network_config()->set_bind_address(ai->c_addrinfo()->ai_addr);
listen_open();
} else {
torrent::config::network_config()->set_bind_address(ai->address()->c_sockaddr());
torrent::config::network_config()->set_bind_address(ai->c_addrinfo()->ai_addr);
}
rak::address_info::free_address_info(ai);
@@ -224,7 +226,7 @@ Manager::set_local_address(const std::string& addr) {
throw torrent::input_error("Could not set local address: " + std::string(rak::address_info::strerror(err)) + ".");
try {
torrent::config::network_config()->set_local_address(ai->address()->c_sockaddr());
torrent::config::network_config()->set_local_address(ai->c_addrinfo()->ai_addr);
rak::address_info::free_address_info(ai);
@@ -254,8 +256,10 @@ Manager::set_proxy_address(const std::string& addr) {
try {
ai->address()->set_port(port);
torrent::config::network_config()->set_proxy_address(ai->address()->c_sockaddr());
auto sa = torrent::sa_copy(ai->c_addrinfo()->ai_addr);
torrent::sap_set_port(sa, port);
torrent::config::network_config()->set_proxy_address(sa.get());
rak::address_info::free_address_info(ai);
+2 -11
View File
@@ -6,7 +6,6 @@
#include <cstdio>
#include <sstream>
#include <iomanip>
#include <rak/socket_address.h>
#include <torrent/exceptions.h>
#include <torrent/connection_manager.h>
#include <torrent/rate.h>
@@ -31,7 +30,7 @@
namespace display {
char*
print_string(char* first, char* last, char* str) {
print_string(char* first, char* last, const char* str) {
if (first == last)
return first;
@@ -80,17 +79,9 @@ print_ddmmyyyy(char* first, char* last, time_t t) {
return print_buffer(first, last, "%02u/%02u/%04u", u->tm_mday, (u->tm_mon + 1), (1900 + u->tm_year));
}
char*
print_address(char* first, char* last, const rak::socket_address* sa) {
if (!sa->address_c_str(first, last - first))
return first;
return std::find(first, last, '\0');
}
inline char*
print_address(char* first, char* last, const sockaddr* sa) {
return print_address(first, last, rak::socket_address::cast_from(sa));
return print_string(first, last, torrent::sa_addr_str(sa).c_str());
}
char*
+3 -3
View File
@@ -1,10 +1,10 @@
#include "config.h"
#include <stdexcept>
#include <rak/socket_address.h>
#include <torrent/rate.h>
#include <torrent/data/block_transfer.h>
#include <torrent/data/piece.h>
#include <torrent/net/socket_address.h>
#include <torrent/peer/client_list.h>
#include <torrent/peer/peer_info.h>
@@ -63,7 +63,7 @@ WindowPeerList::redraw() {
x = 0;
std::string ip_address = rak::socket_address::cast_from(p->address())->address_str();
auto ip_address = torrent::sa_addr_str(p->address());
if (ip_address.size() >= 24) {
ip_address.replace(ip_address.begin() + 21, ip_address.end(), "...");
@@ -92,7 +92,7 @@ WindowPeerList::redraw() {
peerType = 'u';
else if (p->peer_info()->is_preferred())
peerType = 'p';
else
else
peerType = ' ';
m_canvas->print(x, y, "%c%c/%c%c/%c%c",
+21 -12
View File
@@ -1,13 +1,13 @@
#include "config.h"
#include <cassert>
#include <rak/error_number.h>
#include <rak/socket_address.h>
#include <sys/un.h>
#include <torrent/connection_manager.h>
#include <torrent/poll.h>
#include <torrent/torrent.h>
#include <torrent/exceptions.h>
#include <torrent/net/fd.h>
#include <torrent/net/socket_address.h>
#include "control.h"
#include "globals.h"
@@ -41,7 +41,7 @@ void
SCgi::open_port(void* sa, unsigned int length, bool dontRoute) {
if (!get_fd().open_stream() ||
(dontRoute && !get_fd().set_dont_route(true)))
throw torrent::resource_error("Could not open socket for listening: " + std::string(rak::error_number::current().c_str()));
throw torrent::resource_error("Could not open socket for listening: " + std::string(std::strerror(errno)));
open(sa, length);
}
@@ -51,8 +51,8 @@ SCgi::open_named(const std::string& filename) {
if (filename.empty() || filename.size() > 4096)
throw torrent::resource_error("Invalid filename length.");
char buffer[sizeof(sockaddr_un) + filename.size()];
sockaddr_un* sa = reinterpret_cast<sockaddr_un*>(buffer);
auto buffer = std::make_unique<char[]>(sizeof(sockaddr_un) + filename.size());
sockaddr_un* sa = reinterpret_cast<sockaddr_un*>(buffer.get());
#ifdef __sun__
sa->sun_family = AF_UNIX;
@@ -74,9 +74,9 @@ SCgi::open(void* sa, unsigned int length) {
try {
if (!get_fd().set_nonblock() ||
!get_fd().set_reuse_address(true) ||
!get_fd().bind(*reinterpret_cast<rak::socket_address*>(sa), length) ||
!get_fd().bind_sa(reinterpret_cast<sockaddr*>(sa), length) ||
!get_fd().listen(max_tasks))
throw torrent::resource_error("Could not prepare socket for listening: " + std::string(rak::error_number::current().c_str()));
throw torrent::resource_error("Could not prepare socket for listening: " + std::string(std::strerror(errno)));
torrent::connection_manager()->inc_socket_count();
@@ -108,18 +108,27 @@ SCgi::deactivate() {
void
SCgi::event_read() {
rak::socket_address sa;
utils::SocketFd fd;
while (true) {
int fd;
torrent::sa_unique_ptr sa;
std::tie(fd, sa) = torrent::fd_accept(get_fd().get_fd());
if (fd == -1) {
if (errno == EAGAIN || errno == EWOULDBLOCK)
break;
throw torrent::resource_error("Listener port accept() failed: " + std::string(std::strerror(errno)));
}
while ((fd = get_fd().accept(&sa)).is_valid()) {
SCgiTask* task = std::find_if(m_task, m_task + max_tasks, std::mem_fn(&SCgiTask::is_available));
if (task == m_task + max_tasks) {
fd.close();
torrent::fd_close(fd);
continue;
}
task->open(this, fd.get_fd());
task->open(this, fd);
}
}
+15 -121
View File
@@ -1,37 +1,3 @@
// libTorrent - BitTorrent library
// Copyright (C) 2005-2011, Jari Sundell
//
// 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
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// In addition, as a special exception, the copyright holders give
// permission to link the code of portions of this program with the
// OpenSSL library under certain conditions as described in each
// individual source file, and distribute linked combinations
// including the two.
//
// You must obey the GNU General Public License in all respects for
// all of the code used other than OpenSSL. If you modify file(s)
// with this exception, you may extend this exception to your version
// of the file(s), but you are not obligated to do so. If you do not
// wish to do so, delete this exception statement from your version.
// If you delete this exception statement from all source files in the
// program, then also delete it here.
//
// Contact: Jari Sundell <sundell.software@gmail.com>
#include "config.h"
#include <errno.h>
@@ -44,9 +10,9 @@
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <rak/socket_address.h>
#include <torrent/exceptions.h>
#include <torrent/net/socket_address.h>
#include "socket_fd.h"
namespace utils {
@@ -131,11 +97,11 @@ SocketFd::get_error() const {
bool
SocketFd::open_stream() {
m_fd = socket(rak::socket_address::pf_inet6, SOCK_STREAM, IPPROTO_TCP);
m_fd = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
if (m_fd == -1) {
m_ipv6_socket = false;
return (m_fd = socket(rak::socket_address::pf_inet, SOCK_STREAM, IPPROTO_TCP)) != -1;
return (m_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) != -1;
}
m_ipv6_socket = true;
@@ -146,10 +112,10 @@ SocketFd::open_stream() {
bool
SocketFd::open_datagram() {
m_fd = socket(rak::socket_address::pf_inet6, SOCK_DGRAM, 0);
m_fd = socket(AF_INET6, SOCK_DGRAM, 0);
if (m_fd == -1) {
m_ipv6_socket = false;
return (m_fd = socket(rak::socket_address::pf_inet, SOCK_DGRAM, 0)) != -1;
return (m_fd = socket(AF_INET, SOCK_DGRAM, 0)) != -1;
}
m_ipv6_socket = true;
@@ -159,7 +125,7 @@ SocketFd::open_datagram() {
bool
SocketFd::open_local() {
return (m_fd = socket(rak::socket_address::pf_local, SOCK_STREAM, 0)) != -1;
return (m_fd = socket(AF_LOCAL, SOCK_STREAM, 0)) != -1;
}
void
@@ -169,55 +135,18 @@ SocketFd::close() {
}
bool
SocketFd::bind(const rak::socket_address& sa) {
SocketFd::bind_sa(const sockaddr* sa, unsigned int length) {
check_valid();
if (m_ipv6_socket && sa.family() == rak::socket_address::pf_inet) {
rak::socket_address_inet6 sa_mapped = sa.sa_inet()->to_mapped_address();
return !::bind(m_fd, sa_mapped.c_sockaddr(), sizeof(sa_mapped));
if (m_ipv6_socket && sa->sa_family == AF_INET) {
if (length < sizeof(sockaddr_in))
throw torrent::input_error("SocketFd::bind_sa: invalid sockaddr length for AF_INET");
auto mapped_sa = torrent::sin6_to_v4mapped_in(reinterpret_cast<const sockaddr_in*>(sa));
return !::bind(m_fd, reinterpret_cast<const sockaddr*>(mapped_sa.get()), sizeof(sockaddr_in6));
}
return !::bind(m_fd, sa.c_sockaddr(), sa.length());
}
bool
SocketFd::bind(const rak::socket_address& sa, unsigned int length) {
check_valid();
if (m_ipv6_socket && sa.family() == rak::socket_address::pf_inet) {
rak::socket_address_inet6 sa_mapped = sa.sa_inet()->to_mapped_address();
return !::bind(m_fd, sa_mapped.c_sockaddr(), sizeof(sa_mapped));
}
return !::bind(m_fd, sa.c_sockaddr(), length);
}
bool
SocketFd::connect(const rak::socket_address& sa) {
check_valid();
if (m_ipv6_socket && sa.family() == rak::socket_address::pf_inet) {
rak::socket_address_inet6 sa_mapped = sa.sa_inet()->to_mapped_address();
return !::connect(m_fd, sa_mapped.c_sockaddr(), sizeof(sa_mapped)) || errno == EINPROGRESS;
}
return !::connect(m_fd, sa.c_sockaddr(), sa.length()) || errno == EINPROGRESS;
}
bool
SocketFd::getsockname(rak::socket_address *sa) {
check_valid();
socklen_t len = sizeof(rak::socket_address);
if (::getsockname(m_fd, sa->c_sockaddr(), &len)) {
return false;
}
if (m_ipv6_socket && sa->family() == rak::socket_address::af_inet6) {
*sa = sa->sa_inet6()->normalize_address();
}
return true;
return !::bind(m_fd, sa, length);
}
bool
@@ -227,39 +156,4 @@ SocketFd::listen(int size) {
return !::listen(m_fd, size);
}
SocketFd
SocketFd::accept(rak::socket_address* sa) {
check_valid();
socklen_t len = sizeof(rak::socket_address);
if (sa == NULL) {
return SocketFd(::accept(m_fd, NULL, &len));
}
int fd = ::accept(m_fd, sa->c_sockaddr(), &len);
if (fd != -1 && m_ipv6_socket && sa->family() == rak::socket_address::af_inet6) {
*sa = sa->sa_inet6()->normalize_address();
}
return SocketFd(fd);
}
// unsigned int
// SocketFd::get_read_queue_size() const {
// unsigned int v;
// if (!is_valid() || ioctl(m_fd, SIOCINQ, &v) < 0)
// throw internal_error("SocketFd::get_read_queue_size() could not be performed");
// return v;
// }
// unsigned int
// SocketFd::get_write_queue_size() const {
// unsigned int v;
// if (!is_valid() || ioctl(m_fd, SIOCOUTQ, &v) < 0)
// throw internal_error("SocketFd::get_write_queue_size() could not be performed");
// return v;
// }
}
+4 -47
View File
@@ -1,45 +1,9 @@
// libTorrent - BitTorrent library
// Copyright (C) 2005-2011, Jari Sundell
//
// 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
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// In addition, as a special exception, the copyright holders give
// permission to link the code of portions of this program with the
// OpenSSL library under certain conditions as described in each
// individual source file, and distribute linked combinations
// including the two.
//
// You must obey the GNU General Public License in all respects for
// all of the code used other than OpenSSL. If you modify file(s)
// with this exception, you may extend this exception to your version
// of the file(s), but you are not obligated to do so. If you do not
// wish to do so, delete this exception statement from your version.
// If you delete this exception statement from all source files in the
// program, then also delete it here.
//
// Contact: Jari Sundell <sundell.software@gmail.com>
#ifndef RTORRENT_UTILS_SOCKET_FD_H
#define RTORRENT_UTILS_SOCKET_FD_H
#include <cinttypes>
#include <unistd.h>
namespace rak {
class socket_address;
}
#include <sys/socket.h>
namespace utils {
@@ -51,7 +15,7 @@ public:
explicit SocketFd(int fd) : m_fd(fd) {}
bool is_valid() const { return m_fd >= 0; }
int get_fd() const { return m_fd; }
void set_fd(int fd) { m_fd = fd; }
@@ -75,16 +39,9 @@ public:
void clear() { m_fd = -1; }
bool bind(const rak::socket_address& sa);
bool bind(const rak::socket_address& sa, unsigned int length);
bool connect(const rak::socket_address& sa);
bool getsockname(rak::socket_address* sa);
bool bind_sa(const sockaddr* sa, unsigned int length);
bool listen(int size);
SocketFd accept(rak::socket_address* sa);
// unsigned int get_read_queue_size() const;
// unsigned int get_write_queue_size() const;
private:
inline void check_valid() const;