/* For legacy callers : Attempt a read */
// Keep in sync with Comm::ReadNow()!
++ statCounter.syscalls.sock.reads;
- errno = 0;
+ int xerrno = errno = 0;
int retval = FD_READ_METHOD(fd, ccb->buf, ccb->size);
- debugs(5, 3, "FD " << fd << ", size " << ccb->size << ", retval " << retval << ", errno " << errno);
+ xerrno = errno;
+ debugs(5, 3, "FD " << fd << ", size " << ccb->size << ", retval " << retval << ", errno " << xerrno);
/* See if we read anything */
/* Note - read 0 == socket EOF, which is a valid read */
if (retval >= 0) {
fd_bytes(fd, retval, FD_READ);
ccb->offset = retval;
- ccb->finish(Comm::OK, errno);
+ ccb->finish(Comm::OK, 0);
return;
-
- } else if (retval < 0 && !ignoreErrno(errno)) {
+ } else if (retval < 0 && !ignoreErrno(xerrno)) {
debugs(5, 3, "comm_read_try: scheduling Comm::COMM_ERROR");
ccb->offset = 0;
- ccb->finish(Comm::COMM_ERROR, errno);
+ ccb->finish(Comm::COMM_ERROR, xerrno);
return;
};
void
Comm::TcpAcceptor::setListen()
{
- errcode = 0; // reset local errno copy.
+ errcode = errno = 0;
if (listen(conn->fd, Squid_MaxFD >> 2) < 0) {
- debugs(50, DBG_CRITICAL, "ERROR: listen(" << status() << ", " << (Squid_MaxFD >> 2) << "): " << xstrerror());
errcode = errno;
+ debugs(50, DBG_CRITICAL, "ERROR: listen(" << status() << ", " << (Squid_MaxFD >> 2) << "): " << xstrerr(errcode));
return;
}
#endif /* USE_DELAY_POOLS */
/* actually WRITE data */
+ int xerrno = errno = 0;
len = FD_WRITE_METHOD(fd, state->buf + state->offset, nleft);
+ xerrno = errno;
debugs(5, 5, HERE << "write() returns " << len);
#if USE_DELAY_POOLS
if (nleft != 0)
debugs(5, DBG_IMPORTANT, "FD " << fd << " write failure: connection closed with " << nleft << " bytes remaining.");
- state->finish(nleft ? Comm::COMM_ERROR : Comm::OK, errno);
+ state->finish(nleft ? Comm::COMM_ERROR : Comm::OK, 0);
} else if (len < 0) {
/* An error */
if (fd_table[fd].flags.socket_eof) {
- debugs(50, 2, HERE << "FD " << fd << " write failure: " << xstrerror() << ".");
- state->finish(nleft ? Comm::COMM_ERROR : Comm::OK, errno);
- } else if (ignoreErrno(errno)) {
- debugs(50, 9, HERE << "FD " << fd << " write failure: " << xstrerror() << ".");
+ debugs(50, 2, "FD " << fd << " write failure: " << xstrerr(xerrno) << ".");
+ state->finish(nleft ? Comm::COMM_ERROR : Comm::OK, xerrno);
+ } else if (ignoreErrno(xerrno)) {
+ debugs(50, 9, "FD " << fd << " write failure: " << xstrerr(xerrno) << ".");
state->selectOrQueueWrite();
} else {
- debugs(50, 2, HERE << "FD " << fd << " write failure: " << xstrerror() << ".");
- state->finish(nleft ? Comm::COMM_ERROR : Comm::OK, errno);
+ debugs(50, 2, "FD " << fd << " write failure: " << xstrerr(xerrno) << ".");
+ state->finish(nleft ? Comm::COMM_ERROR : Comm::OK, xerrno);
}
} else {
/* A successful write, continue */
/* Not done, reinstall the write handler and write some more */
state->selectOrQueueWrite();
} else {
- state->finish(nleft ? Comm::OK : Comm::COMM_ERROR, errno);
+ state->finish(nleft ? Comm::OK : Comm::COMM_ERROR, 0);
}
}