}
bool receive_meta(connection_t *c) {
- size_t inlen;
+ int inlen;
char inbuf[MAXBUFSIZE];
char *bufp = inbuf, *endp;
inlen = recv(c->socket, inbuf, sizeof inbuf, 0);
if(inlen <= 0) {
- logger(LOG_ERR, "Receive callback called for %s (%s) but no data to receive: %s", c->name, c->hostname, strerror(errno));
+ if(!inlen || !errno) {
+ ifdebug(CONNECTIONS) logger(LOG_NOTICE, "Connection closed by %s (%s)",
+ c->name, c->hostname);
+ } else if(sockwouldblock(sockerrno))
+ return true;
+ else
+ logger(LOG_ERR, "Metadata socket read error for %s (%s): %s",
+ c->name, c->hostname, sockstrerror(sockerrno));
return false;
}
bufp = endp;
} else {
size_t outlen = inlen;
- ifdebug(META) logger(LOG_DEBUG, "Received encrypted %zu bytes", inlen);
+ ifdebug(META) logger(LOG_DEBUG, "Received encrypted %d bytes", inlen);
evbuffer_expand(c->buffer->input, c->buffer->input->off + inlen);
if(!cipher_decrypt(&c->incipher, bufp, inlen, c->buffer->input->buffer + c->buffer->input->off, &outlen, false) || inlen != outlen) {
}
} while(inlen);
- c->last_ping_time = time(NULL);
-
return true;
}