static long s_sockexFlush( PHB_SOCKEX pSock, HB_MAXINT timeout, HB_BOOL fSync ) { PHB_SOCKEX_Z pZ = HB_ZSOCK_GET( pSock ); long lResult = 0; if( pZ->fCompressOut && ( ! fSync || pZ->z_write.avail_out != HB_ZSOCK_WRBUFSIZE || pZ->z_write.total_in != 0 || pZ->z_write.total_out != 0 ) ) { int err; if( pZ->z_write.avail_out > 0 ) err = deflate( &pZ->z_write, fSync ? Z_FULL_FLUSH : Z_PARTIAL_FLUSH ); else err = Z_OK; while( pZ->z_write.avail_out < HB_ZSOCK_WRBUFSIZE ) { if( s_zsock_write( pZ, timeout ) <= 0 ) break; if( err == Z_OK ) err = deflate( &pZ->z_write, fSync ? Z_FULL_FLUSH : Z_PARTIAL_FLUSH ); } if( err != Z_OK && err != Z_BUF_ERROR ) hb_socketSetError( HB_ZSOCK_ERROR_BASE - err ); lResult = HB_ZSOCK_WRBUFSIZE - pZ->z_write.avail_out; } return lResult + hb_sockexFlush( pZ->sock, timeout, fSync ); }
static long s_sockexFlush( PHB_SOCKEX pSock, HB_MAXINT timeout, HB_BOOL fSync ) { PHB_SOCKEX_BF pBF = HB_BFSOCK_GET( pSock ); while( pBF->inbuffer > 0 ) { if( s_bf_send( pBF, timeout ) <= 0 ) break; } return pBF->inbuffer + hb_sockexFlush( pBF->sock, timeout, fSync ); }
long hb_sockexWrite( PHB_SOCKEX pSock, const void * data, long len, HB_MAXINT timeout ) { len = pSock->pFilter->Write( pSock, data, len, timeout ); if( len >= 0 && pSock->iAutoFlush > 0 ) { if( timeout >= 0 ) timeout = HB_MAX( timeout, pSock->iAutoFlush ); hb_sockexFlush( pSock, timeout, HB_FALSE ); } return len; }
static void s_fileFlush( PHB_FILE pFile, HB_BOOL fDirty ) { HB_SYMBOL_UNUSED( fDirty ); hb_sockexFlush( pFile->sock, pFile->timeout, HB_FALSE ); }