bufferptr bp = blp.get_current_ptr();
int read = MIN(bp.length(), left);
ldout(msgr->cct,20) << "reader reading nonblocking into " << (void*)bp.c_str() << " len " << bp.length() << dendl;
- int got = tcp_read_nonblocking(bp.c_str(), read);
+ ssize_t got = tcp_read_nonblocking(bp.c_str(), read);
ldout(msgr->cct,30) << "reader read " << got << " of " << read << dendl;
connection_state->lock.Unlock();
if (got < 0)
}
-int Pipe::do_sendmsg(struct msghdr *msg, int len, bool more)
+int Pipe::do_sendmsg(struct msghdr *msg, unsigned len, bool more)
{
suppress_sigpipe();
while (len > 0) {
if (0) { // sanity
- int l = 0;
+ unsigned l = 0;
for (unsigned i=0; i<msg->msg_iovlen; i++)
l += msg->msg_iov[i].iov_len;
assert(l == len);
msglen += donow;
msg.msg_iovlen++;
+ assert(left >= donow);
left -= donow;
- assert(left >= 0);
b_off += donow;
bl_pos += donow;
if (left == 0)
break;
- while (b_off == (int)pb->length()) {
+ while (b_off == pb->length()) {
++pb;
b_off = 0;
}
}
-int Pipe::tcp_read(char *buf, int len)
+int Pipe::tcp_read(char *buf, unsigned len)
{
if (sd < 0)
return -1;
if (tcp_read_wait() < 0)
return -1;
- int got = tcp_read_nonblocking(buf, len);
+ ssize_t got = tcp_read_nonblocking(buf, len);
if (got < 0)
return -1;
buf += got;
//lgeneric_dout(cct, DBL) << "tcp_read got " << got << ", " << len << " left" << dendl;
}
- return len;
+ return 0;
}
int Pipe::tcp_read_wait()
return 0;
}
-int Pipe::do_recv(char *buf, size_t len, int flags)
+ssize_t Pipe::do_recv(char *buf, size_t len, int flags)
{
again:
- int got = ::recv( sd, buf, len, flags );
+ ssize_t got = ::recv( sd, buf, len, flags );
if (got < 0) {
if (errno == EAGAIN || errno == EINTR) {
goto again;
return got;
}
-int Pipe::buffered_recv(char *buf, size_t len, int flags)
+ssize_t Pipe::buffered_recv(char *buf, size_t len, int flags)
{
- int left = len;
- int total_recv = 0;
+ size_t left = len;
+ ssize_t total_recv = 0;
if (recv_len > recv_ofs) {
int to_read = MIN(recv_len - recv_ofs, left);
memcpy(buf, &recv_buf[recv_ofs], to_read);
if (len > (size_t)recv_max_prefetch) {
/* this was a large read, we don't prefetch for these */
- int ret = do_recv(buf, left, flags );
+ ssize_t ret = do_recv(buf, left, flags );
if (ret < 0) {
if (total_recv > 0)
return total_recv;
}
- int got = do_recv(recv_buf, recv_max_prefetch, flags);
+ ssize_t got = do_recv(recv_buf, recv_max_prefetch, flags);
if (got <= 0) {
if (total_recv > 0)
return total_recv;
return got;
}
- recv_len = got;
- got = MIN(left, got);
+ recv_len = (size_t)got;
+ got = MIN(left, (size_t)got);
memcpy(buf, recv_buf, got);
recv_ofs = got;
total_recv += got;
return total_recv;
}
-int Pipe::tcp_read_nonblocking(char *buf, int len)
+ssize_t Pipe::tcp_read_nonblocking(char *buf, unsigned len)
{
- int got = buffered_recv(buf, len, MSG_DONTWAIT );
+ ssize_t got = buffered_recv(buf, len, MSG_DONTWAIT );
if (got < 0) {
ldout(msgr->cct, 10) << __func__ << " socket " << sd << " returned "
<< got << " " << cpp_strerror(errno) << dendl;
return got;
}
-int Pipe::tcp_write(const char *buf, int len)
+int Pipe::tcp_write(const char *buf, unsigned len)
{
if (sd < 0)
return -1;
}
char *recv_buf;
- int recv_max_prefetch;
- int recv_ofs;
- int recv_len;
+ size_t recv_max_prefetch;
+ size_t recv_ofs;
+ size_t recv_len;
enum {
STATE_ACCEPTING,
* @param more Should be set true if this is one part of a larger message
* @return 0, or -1 on failure (unrecoverable -- close the socket).
*/
- int do_sendmsg(struct msghdr *msg, int len, bool more=false);
+ int do_sendmsg(struct msghdr *msg, unsigned len, bool more=false);
int write_ack(uint64_t s);
int write_keepalive();
int write_keepalive2(char tag, const utime_t &t);
recv_len = 0;
recv_ofs = 0;
}
- int do_recv(char *buf, size_t len, int flags);
- int buffered_recv(char *buf, size_t len, int flags);
+ ssize_t do_recv(char *buf, size_t len, int flags);
+ ssize_t buffered_recv(char *buf, size_t len, int flags);
bool has_pending_data() { return recv_len > recv_ofs; }
/**
* @param len exact number of bytes to read
* @return 0 for success, or -1 on error
*/
- int tcp_read(char *buf, int len);
+ int tcp_read(char *buf, unsigned len);
/**
* wait for bytes to become available on the socket
* @param len maximum number of bytes to read
* @return bytes read, or -1 on error or when there is no data
*/
- int tcp_read_nonblocking(char *buf, int len);
+ ssize_t tcp_read_nonblocking(char *buf, unsigned len);
/**
* blocking write of bytes to socket
* @param len number of bytes to write
* @return 0 for success, or -1 on error
*/
- int tcp_write(const char *buf, int len);
+ int tcp_write(const char *buf, unsigned len);
};