X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsocket.cpp;h=282d3c5a72fb4355bdfe74e347a28e6d0fb45080;hb=59b1a8955142935b02af6446005ab47fc7c3fc8c;hp=7e36d8fb8d17fbc3815a78ee4bc054dadabc93bb;hpb=0a44bf8490fe7adc0d6b7e00a41ad702d800040e;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/socket.cpp b/src/socket.cpp index 7e36d8fb8..282d3c5a7 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -29,6 +29,7 @@ using namespace std; #include #include #include +#include #include "socket.h" #include "inspircd.h" #include "inspircd_io.h" @@ -102,7 +103,7 @@ InspSocket::InspSocket(std::string host, int port, bool listening, unsigned long /* Its not an ip, spawn the resolver */ this->dns.SetNS(std::string(Config->DNSServer)); this->dns.ForwardLookupWithFD(host,fd); - timeout_end = time(NULL)+maxtime; + timeout_end = time(NULL) + maxtime; timeout = false; this->state = I_RESOLVING; socket_ref[this->fd] = this; @@ -111,6 +112,7 @@ InspSocket::InspSocket(std::string host, int port, bool listening, unsigned long { log(DEBUG,"No need to resolve %s",this->host.c_str()); this->IP = host; + timeout_end = time(NULL) + maxtime; this->DoConnect(); } } @@ -240,7 +242,16 @@ char* InspSocket::Read() // and should be aborted. int InspSocket::Write(std::string data) { - this->Buffer.append(data); + try + { + if ((data != "") && (this->Buffer.length() + data.length() < this->Buffer.max_size())) + this->Buffer.append(data); + } + catch (std::length_error) + { + log(DEBUG,"std::length_error exception caught while appending to socket buffer!"); + return 0; + } return data.length(); } @@ -271,6 +282,7 @@ bool InspSocket::Timeout(time_t current) { if (((this->state == I_RESOLVING) || (this->state == I_CONNECTING)) && (current > timeout_end)) { + log(DEBUG,"Timed out, current=%lu timeout_end=%lu"); // for non-listening sockets, the timeout can occur // which causes termination of the connection after // the given number of seconds without a successful @@ -289,6 +301,8 @@ bool InspSocket::Poll() { int incoming = -1; bool n = true; + + log(DEBUG,"InspSocket::Poll()"); switch (this->state) { @@ -314,7 +328,9 @@ bool InspSocket::Poll() return true; break; case I_CONNECTED: + log(DEBUG,"State = I_CONNECTED"); n = this->OnDataReady(); + log(DEBUG,"State return: %d",(int)n); /* Flush any pending, but not till after theyre done with the event * so there are less write calls involved. */ this->FlushWriteBuffer();