anope- supernets anope source code & configuration |
git clone git://git.acid.vegas/anope.git |
Log | Files | Refs | Archive | README |
socket_clients.cpp (1981B)
1 /* 2 * 3 * (C) 2003-2022 Anope Team 4 * Contact us at team@anope.org 5 * 6 * Please read COPYING and README for further details. 7 * 8 * Based on the original code of Epona by Lara. 9 * Based on the original code of Services by Andy Church. 10 */ 11 12 #include "services.h" 13 #include "anope.h" 14 #include "logger.h" 15 #include "sockets.h" 16 17 #include <errno.h> 18 19 void ConnectionSocket::Connect(const Anope::string &TargetHost, int Port) 20 { 21 this->io->Connect(this, TargetHost, Port); 22 } 23 24 bool ConnectionSocket::Process() 25 { 26 try 27 { 28 if (this->flags[SF_CONNECTED]) 29 return true; 30 else if (this->flags[SF_CONNECTING]) 31 this->flags[this->io->FinishConnect(this)] = true; 32 else 33 this->flags[SF_DEAD] = true; 34 } 35 catch (const SocketException &ex) 36 { 37 Log() << ex.GetReason(); 38 } 39 return false; 40 } 41 42 void ConnectionSocket::ProcessError() 43 { 44 int optval = 0; 45 socklen_t optlen = sizeof(optval); 46 getsockopt(this->GetFD(), SOL_SOCKET, SO_ERROR, reinterpret_cast<char *>(&optval), &optlen); 47 errno = optval; 48 this->OnError(optval ? Anope::LastError() : ""); 49 } 50 51 void ConnectionSocket::OnConnect() 52 { 53 } 54 55 void ConnectionSocket::OnError(const Anope::string &error) 56 { 57 Log(LOG_DEBUG) << "Socket error: " << error; 58 } 59 60 ClientSocket::ClientSocket(ListenSocket *l, const sockaddrs &addr) : ls(l), clientaddr(addr) 61 { 62 } 63 64 bool ClientSocket::Process() 65 { 66 try 67 { 68 if (this->flags[SF_ACCEPTED]) 69 return true; 70 else if (this->flags[SF_ACCEPTING]) 71 this->flags[this->io->FinishAccept(this)] = true; 72 else 73 this->flags[SF_DEAD] = true; 74 } 75 catch (const SocketException &ex) 76 { 77 Log() << ex.GetReason(); 78 } 79 return false; 80 } 81 82 void ClientSocket::ProcessError() 83 { 84 int optval = 0; 85 socklen_t optlen = sizeof(optval); 86 getsockopt(this->GetFD(), SOL_SOCKET, SO_ERROR, reinterpret_cast<char *>(&optval), &optlen); 87 errno = optval; 88 this->OnError(optval ? Anope::LastError() : ""); 89 } 90 91 void ClientSocket::OnAccept() 92 { 93 } 94 95 void ClientSocket::OnError(const Anope::string &error) 96 { 97 Log(LOG_DEBUG) << "Socket error: " << error; 98 }