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; }
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; }