aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/http/fetch/sockhandler.h
diff options
context:
space:
mode:
authorAlexey Efimov <xeno@prnwatch.com>2022-02-10 16:49:42 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:49:42 +0300
commit0fd1998e1b2369f50fb694556f817d3c7fef10c8 (patch)
tree5d5cb817648f650d76cf1076100726fd9b8448e8 /library/cpp/http/fetch/sockhandler.h
parent26e0e4fb5e5cd6b4d7f4c21f9fcd7978891bf946 (diff)
downloadydb-0fd1998e1b2369f50fb694556f817d3c7fef10c8.tar.gz
Restoring authorship annotation for Alexey Efimov <xeno@prnwatch.com>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/http/fetch/sockhandler.h')
-rw-r--r--library/cpp/http/fetch/sockhandler.h260
1 files changed, 130 insertions, 130 deletions
diff --git a/library/cpp/http/fetch/sockhandler.h b/library/cpp/http/fetch/sockhandler.h
index 776704ba8c..e18149f657 100644
--- a/library/cpp/http/fetch/sockhandler.h
+++ b/library/cpp/http/fetch/sockhandler.h
@@ -1,130 +1,130 @@
-#pragma once
-
-#include <library/cpp/logger/all.h>
-
-#include <util/generic/buffer.h>
-#include <util/generic/map.h>
-#include <util/generic/vector.h>
-#include <util/network/address.h>
-#include <util/network/ip.h>
-#include <util/network/socket.h>
-#include <util/system/mutex.h>
-#include <util/system/yassert.h>
-
-#include <cerrno>
-#include <util/generic/noncopyable.h>
-
-class TAddrList: public TVector<NAddr::IRemoteAddrRef> {
-private:
- using TBase = TVector<NAddr::IRemoteAddrRef>;
-
-public:
- //msvc doesn't support base class constructor inheritance
- TAddrList() = default;
-
- template <typename T>
- TAddrList(T&& arg)
- : TBase(std::forward<T>(arg))
- {
- }
-
- template <typename T1, typename T2>
- TAddrList(T1&& arg1, T2&& arg2)
- : TBase(std::forward<T1>(arg1), std::forward<T2>(arg2))
- {
- }
-
- TAddrList(std::initializer_list<NAddr::IRemoteAddrRef> list)
- : TBase(list)
- {
- }
-
- static TAddrList MakeV4Addr(ui32 ip, TIpPort port) {
- return TAddrList({new NAddr::TIPv4Addr(TIpAddress(htonl(ip), htons(port)))});
- }
-
- std::pair<ui32, TIpPort> GetV4Addr() const {
- for (const auto& addrRef : *this) {
- const sockaddr* sa = addrRef->Addr();
- if (sa->sa_family == AF_INET) {
- const sockaddr_in* sin = reinterpret_cast<const sockaddr_in*>(sa);
- return std::make_pair(ntohl(sin->sin_addr.s_addr), ntohs(sin->sin_port));
- }
- }
- return std::make_pair(0, 0);
- }
-};
-
-class TSimpleSocketHandler {
-public:
- TSimpleSocketHandler() = default;
-
- int Good() const {
- return static_cast<bool>(Socket);
- }
-
- int Connect(const TAddrList& addrs, TDuration timeout) {
- try {
- for (const auto& item : addrs) {
- const sockaddr* sa = item->Addr();
- TSocketHolder s(socket(sa->sa_family, SOCK_STREAM, 0));
- if (s.Closed()) {
- continue;
- }
-
-#ifndef WIN32
- if (fcntl(s, F_SETFD, FD_CLOEXEC)) // no inherit on fork()/exec()
- return errno ? errno : EBADF;
-#endif
- if (connect(s, sa, item->Len())) {
- s.Close();
- continue;
- }
-
- Socket.Reset(new TSocket(s.Release()));
- Socket->SetSocketTimeout(timeout.Seconds(), timeout.MilliSecondsOfSecond());
- Socket->SetZeroLinger();
- Socket->SetKeepAlive(true);
- return 0;
- }
- } catch (...) {
- return EBADF;
- }
- return errno ? errno : EBADF;
- }
-
- void Disconnect() {
- if (!Socket)
- return;
- Socket->ShutDown(SHUT_RDWR);
- Socket.Destroy();
- }
-
- void SetSocket(SOCKET fd) {
- Socket.Reset(new TSocket(fd));
- }
-
- void shutdown() {
- Socket->ShutDown(SHUT_WR);
- }
-
- int send(const void* message, size_t messlen) {
- return ((ssize_t)messlen == Socket->Send(message, messlen));
- }
-
- int peek() {
- char buf[1];
- return (1 == recv(*Socket, buf, 1, MSG_PEEK));
- }
-
- ssize_t read(void* buffer, size_t buflen) {
- return Socket->Recv(buffer, buflen);
- }
-
- THolder<TSocket> PickOutSocket() {
- return std::move(Socket);
- }
-
-protected:
- THolder<TSocket> Socket;
-};
+#pragma once
+
+#include <library/cpp/logger/all.h>
+
+#include <util/generic/buffer.h>
+#include <util/generic/map.h>
+#include <util/generic/vector.h>
+#include <util/network/address.h>
+#include <util/network/ip.h>
+#include <util/network/socket.h>
+#include <util/system/mutex.h>
+#include <util/system/yassert.h>
+
+#include <cerrno>
+#include <util/generic/noncopyable.h>
+
+class TAddrList: public TVector<NAddr::IRemoteAddrRef> {
+private:
+ using TBase = TVector<NAddr::IRemoteAddrRef>;
+
+public:
+ //msvc doesn't support base class constructor inheritance
+ TAddrList() = default;
+
+ template <typename T>
+ TAddrList(T&& arg)
+ : TBase(std::forward<T>(arg))
+ {
+ }
+
+ template <typename T1, typename T2>
+ TAddrList(T1&& arg1, T2&& arg2)
+ : TBase(std::forward<T1>(arg1), std::forward<T2>(arg2))
+ {
+ }
+
+ TAddrList(std::initializer_list<NAddr::IRemoteAddrRef> list)
+ : TBase(list)
+ {
+ }
+
+ static TAddrList MakeV4Addr(ui32 ip, TIpPort port) {
+ return TAddrList({new NAddr::TIPv4Addr(TIpAddress(htonl(ip), htons(port)))});
+ }
+
+ std::pair<ui32, TIpPort> GetV4Addr() const {
+ for (const auto& addrRef : *this) {
+ const sockaddr* sa = addrRef->Addr();
+ if (sa->sa_family == AF_INET) {
+ const sockaddr_in* sin = reinterpret_cast<const sockaddr_in*>(sa);
+ return std::make_pair(ntohl(sin->sin_addr.s_addr), ntohs(sin->sin_port));
+ }
+ }
+ return std::make_pair(0, 0);
+ }
+};
+
+class TSimpleSocketHandler {
+public:
+ TSimpleSocketHandler() = default;
+
+ int Good() const {
+ return static_cast<bool>(Socket);
+ }
+
+ int Connect(const TAddrList& addrs, TDuration timeout) {
+ try {
+ for (const auto& item : addrs) {
+ const sockaddr* sa = item->Addr();
+ TSocketHolder s(socket(sa->sa_family, SOCK_STREAM, 0));
+ if (s.Closed()) {
+ continue;
+ }
+
+#ifndef WIN32
+ if (fcntl(s, F_SETFD, FD_CLOEXEC)) // no inherit on fork()/exec()
+ return errno ? errno : EBADF;
+#endif
+ if (connect(s, sa, item->Len())) {
+ s.Close();
+ continue;
+ }
+
+ Socket.Reset(new TSocket(s.Release()));
+ Socket->SetSocketTimeout(timeout.Seconds(), timeout.MilliSecondsOfSecond());
+ Socket->SetZeroLinger();
+ Socket->SetKeepAlive(true);
+ return 0;
+ }
+ } catch (...) {
+ return EBADF;
+ }
+ return errno ? errno : EBADF;
+ }
+
+ void Disconnect() {
+ if (!Socket)
+ return;
+ Socket->ShutDown(SHUT_RDWR);
+ Socket.Destroy();
+ }
+
+ void SetSocket(SOCKET fd) {
+ Socket.Reset(new TSocket(fd));
+ }
+
+ void shutdown() {
+ Socket->ShutDown(SHUT_WR);
+ }
+
+ int send(const void* message, size_t messlen) {
+ return ((ssize_t)messlen == Socket->Send(message, messlen));
+ }
+
+ int peek() {
+ char buf[1];
+ return (1 == recv(*Socket, buf, 1, MSG_PEEK));
+ }
+
+ ssize_t read(void* buffer, size_t buflen) {
+ return Socket->Recv(buffer, buflen);
+ }
+
+ THolder<TSocket> PickOutSocket() {
+ return std::move(Socket);
+ }
+
+protected:
+ THolder<TSocket> Socket;
+};