static HB_SIZE s_fileWrite( PHB_FILE pFile, const void * data, HB_SIZE nSize, HB_MAXINT timeout ) { long lSent = nSize > LONG_MAX ? LONG_MAX : ( long ) nSize; HB_ERRCODE errcode; if( timeout == -1 ) timeout = pFile->timeout; lSent = hb_sockexWrite( pFile->sock, data, lSent, timeout ); errcode = hb_socketGetError(); hb_fsSetError( errcode ); if( lSent < 0 ) { switch( errcode ) { case HB_SOCKET_ERR_TIMEOUT: case HB_SOCKET_ERR_AGAIN: case HB_SOCKET_ERR_TRYAGAIN: lSent = 0; break; } } return lSent; }
static long s_bf_send( PHB_SOCKEX_BF pBF, HB_MAXINT timeout ) { long lSent = 0, len = pBF->inbuffer; while( lSent < len ) { long l = hb_sockexWrite( pBF->sock, pBF->buffer + lSent, len - lSent, timeout ); if( l <= 0 ) { switch( hb_socketGetError() ) { case HB_SOCKET_ERR_TIMEOUT: case HB_SOCKET_ERR_AGAIN: case HB_SOCKET_ERR_TRYAGAIN: break; default: lSent = -1; break; } break; } lSent += l; if( timeout > 0 ) timeout = 0; } if( lSent > 0 ) { if( lSent < len ) memmove( pBF->buffer, pBF->buffer + lSent, len - lSent ); pBF->inbuffer -= lSent; } return lSent; }
static long s_sockexWrite( PHB_SOCKEX pSock, const void * data, long len, HB_MAXINT timeout ) { PHB_SOCKEX_Z pZ = HB_ZSOCK_GET( pSock ); if( pZ->fCompressOut ) { long lWritten = 0; pZ->z_write.next_in = ( Bytef * ) data; pZ->z_write.avail_in = ( uInt ) len; while( pZ->z_write.avail_in ) { int err; if( pZ->z_write.avail_out == 0 ) { lWritten = s_zsock_write( pZ, timeout ); if( lWritten <= 0 ) break; timeout = 0; } err = deflate( &pZ->z_write, Z_NO_FLUSH ); if( err != Z_OK ) { if( err != Z_BUF_ERROR ) { hb_socketSetError( HB_ZSOCK_ERROR_BASE - err ); lWritten = -1; } break; } } return lWritten >= 0 ? ( long ) ( len - pZ->z_write.avail_in ) : lWritten; } else return hb_sockexWrite( pZ->sock, data, len, timeout ); }
static long s_zsock_write( PHB_SOCKEX_Z pZ, HB_MAXINT timeout ) { long lSent = 0, len = HB_ZSOCK_WRBUFSIZE - pZ->z_write.avail_out; while( lSent < len ) { long l = hb_sockexWrite( pZ->sock, pZ->wrbuf + lSent, len - lSent, timeout ); if( l <= 0 ) { switch( hb_socketGetError() ) { case HB_SOCKET_ERR_TIMEOUT: case HB_SOCKET_ERR_AGAIN: case HB_SOCKET_ERR_TRYAGAIN: break; default: lSent = -1; break; } break; } lSent += l; if( timeout > 0 ) timeout = 0; } if( lSent > 0 ) { if( lSent < len ) memmove( pZ->wrbuf, pZ->wrbuf + lSent, len - lSent ); pZ->z_write.avail_out += lSent; pZ->z_write.next_out -= lSent; } return lSent; }