Method _Stdio.Buffer()->set_error_mode()
- Method
set_error_mode
Buffer
set_error_mode(int
m
)
Buffer
set_error_mode(program
m
)- Description
Set the error mode of this buffer to
m
.If true operations that would normally return 0 (like trying to read too much) will instead throw an error. If
m
is a program a clone of it will be thrown on error.This is useful when parsing received data, you do not have to verify that each and every read operation suceeds.
However, the non-error mode is more useful when checking to see if a packet/segment/whatever has arrived.
The thrown error object will have the constant buffer_error set to a non-false value.
- Example
void read_callback(int i, string(8bit) new_data) { inbuffer->add( new_data ); while( Buffer packet = inbuffer->read_hbuffer(2) ) { packet->set_error_mode(Buffer.THROW_ERROR); if( mixed e = catch( handle_packet( packet ) ) ) if( e->buffer_error ) protocol_error(); // illegal data in packet else throw(e); // the other code did something bad } } void handle_packet( Buffer pack ) { switch( pack->read_int8() ) { ... case HEADER_FRAME: int num_headers = pack->read_int32(); for( int i = 0; i<num_headers; i++ ) headers[pack->read_hstring(2)] = pack->read_hstring(2); ... } }