mirror of
https://github.com/anope/anope.git
synced 2026-07-03 00:03:13 +02:00
Cleaned up some of the socket code, cleaned up the pipe engines, added support for binary sockets, and cleaned up the asynch connect/accept code
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
*
|
||||
* (C) 2003-2011 Anope Team
|
||||
* Contact us at team@anope.org
|
||||
*
|
||||
* Please read COPYING and README for further details.
|
||||
*
|
||||
* Based on the original code of Epona by Lara.
|
||||
* Based on the original code of Services by Andy Church.
|
||||
*/
|
||||
|
||||
#include "services.h"
|
||||
|
||||
ConnectionSocket::ConnectionSocket() : Socket()
|
||||
{
|
||||
}
|
||||
|
||||
void ConnectionSocket::Connect(const Anope::string &TargetHost, int Port)
|
||||
{
|
||||
this->IO->Connect(this, TargetHost, Port);
|
||||
}
|
||||
|
||||
bool ConnectionSocket::Process()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (this->HasFlag(SF_CONNECTED))
|
||||
return true;
|
||||
else if (this->HasFlag(SF_CONNECTING))
|
||||
this->SetFlag(this->IO->FinishConnect(this));
|
||||
else
|
||||
this->SetFlag(SF_DEAD);
|
||||
}
|
||||
catch (const SocketException &ex)
|
||||
{
|
||||
Log() << ex.GetReason();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ConnectionSocket::ProcessError()
|
||||
{
|
||||
int optval = 0;
|
||||
socklen_t optlen = sizeof(optval);
|
||||
getsockopt(this->GetFD(), SOL_SOCKET, SO_ERROR, reinterpret_cast<char *>(&optval), &optlen);
|
||||
errno = optval;
|
||||
this->OnError(optval ? Anope::LastError() : "");
|
||||
}
|
||||
|
||||
void ConnectionSocket::OnConnect()
|
||||
{
|
||||
}
|
||||
|
||||
void ConnectionSocket::OnError(const Anope::string &)
|
||||
{
|
||||
}
|
||||
|
||||
ClientSocket::ClientSocket(ListenSocket *ls, const sockaddrs &addr) : Socket(), LS(ls), clientaddr(addr)
|
||||
{
|
||||
}
|
||||
|
||||
bool ClientSocket::Process()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (this->HasFlag(SF_ACCEPTED))
|
||||
return true;
|
||||
else if (this->HasFlag(SF_ACCEPTING))
|
||||
this->SetFlag(this->IO->FinishAccept(this));
|
||||
else
|
||||
this->SetFlag(SF_DEAD);
|
||||
}
|
||||
catch (const SocketException &ex)
|
||||
{
|
||||
Log() << ex.GetReason();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ClientSocket::ProcessError()
|
||||
{
|
||||
int optval = 0;
|
||||
socklen_t optlen = sizeof(optval);
|
||||
getsockopt(this->GetFD(), SOL_SOCKET, SO_ERROR, reinterpret_cast<char *>(&optval), &optlen);
|
||||
errno = optval;
|
||||
this->OnError(optval ? Anope::LastError() : "");
|
||||
}
|
||||
|
||||
void ClientSocket::OnAccept()
|
||||
{
|
||||
}
|
||||
|
||||
void ClientSocket::OnError(const Anope::string &error)
|
||||
{
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user