this->fd = -1;
this->state = I_ERROR;
this->OnError(I_ERR_SOCKET);
+ this->ClosePending = true;
log(DEBUG,"OpenTCPSocket() error");
return;
}
this->fd = -1;
this->state = I_ERROR;
this->OnError(I_ERR_BIND);
+ this->ClosePending = true;
log(DEBUG,"BindSocket() error %s",strerror(errno));
return;
}
this->state = I_ERROR;
this->OnError(I_ERR_RESOLVE);
this->fd = -1;
+ this->ClosePending = true;
return false;
}
return this->DoConnect();
{
log(DEBUG,"Error connect() %d: %s",this->fd,strerror(errno));
this->OnError(I_ERR_CONNECT);
- this->state = I_ERROR;
this->Close();
+ this->state = I_ERROR;
this->fd = -1;
+ this->ClosePending = true;
return false;
}
}
shutdown(this->fd,2);
close(this->fd);
socket_ref[this->fd] = NULL;
+ this->ClosePending = true;
this->fd = -1;
}
}
{
if (outbuffer.size())
{
- log(DEBUG,"Writing %d to socket",outbuffer.size());
int result = write(this->fd,outbuffer[0].c_str(),outbuffer[0].length());
if (result > 0)
{
- log(DEBUG,"Wrote %d to socket",result);
if ((unsigned int)result == outbuffer[0].length())
{
/* The whole block was written (usually a line)
* Pop the block off the front of the queue
*/
- log(DEBUG,"Popping front item, now %d items left",outbuffer.size());
outbuffer.pop_front();
}
else
{
- log(DEBUG,"Cutting front item");
std::string temp = outbuffer[0].substr(result);
outbuffer[0] = temp;
- log(DEBUG,"Front item is now: ",outbuffer[0].c_str());
}
}
else if ((result == -1) && (errno != EAGAIN))
log(DEBUG,"Write error on socket: %s",strerror(errno));
this->OnError(I_ERR_WRITE);
this->state = I_ERROR;
+ this->ClosePending = true;
return true;
}
}
}
- return false;
+ return (fd < 0);
}
bool InspSocket::Timeout(time_t current)
this->OnError(I_ERR_TIMEOUT);
timeout = true;
this->state = I_ERROR;
+ this->ClosePending = true;
return true;
}
return this->FlushWriteBuffer();
* Both FlushWriteBuffer AND the return result of OnDataReady must
* return true for this to be ok.
*/
- return (n && !this->FlushWriteBuffer());
+ if (this->FlushWriteBuffer())
+ return false;
+ return n;
break;
default:
break;