Beispiel #1
0
ssize_t BufIo::FeedIn(SOCKET sk, size_t limit)
{
  ssize_t r;

  if( !m_valid ){
#ifdef ENOBUFS
    errno = ENOBUFS;
#else
    errno = EIO;
#endif
    return -1;
  }

  if( !LeftSize() && _realloc_buffer() < 0 ){
    m_valid = 0;
    return (ssize_t)-1;
  }

  if( 0==limit || limit > LeftSize() )
    limit = LeftSize();
  r = _RECV(sk, m_buf + m_len, limit);
  if( r < 0 ){
    m_valid = 0;
    return -1;
  }else{
    if( r ) m_len += r;
    if( m_socket_remote_closed ){  // connection closed by remote
      errno = 0;
      return -1;
    }
  }
  return (ssize_t)m_len;
}
Beispiel #2
0
ssize_t BufIo::FeedIn(SOCKET sk, size_t limit)
{
	ssize_t r;

	if (!_left_buffer_size)
		if (_realloc_buffer() < 0)
			return(ssize_t) - 2;

	if (0 == limit || limit > _left_buffer_size)
		limit = _left_buffer_size;
	r = _RECV(sk, b + p, limit);
	if (r < 0)
		return -1;
	else {
		if (r)
			p += r;
		if (f_socket_remote_closed)
			return -2; // connection closed by remote
	}
	return(ssize_t) p;
}