sbuf = rmr_send_msg( mrc, sbuf ); // retry send until it's good (simple test; real programmes should do better)
}
if( sbuf->state == RMR_OK ) {
+ if( successful == 0 ) {
+ fail_count = 0; // reset on first good message out
+ }
successful = 1; // indicates only that we sent one successful message, not the current state
} else {
- if( successful ) {
- fail_count++; // count failures after first successful message
- }
- if( fail_count > 10 ) {
- fprintf( stderr, "too many failures\n" );
+ fail_count++; // count failures after first successful message
+ if( ! successful && fail_count > 10 ) {
+ fprintf( stderr, "[FAIL] too many send failures\n" );
exit( 1 );
}
}
default:
if( successful ) {
fail_count++; // count failures after first successful message
+ } else {
+ fail_count++;
+ if( fail_count > 10 ) {
+ fprintf( stderr, "<VSEND> giving up\n" );
+ exit( 1 );
+ }
}
// some error (not connected likely), don't count this
//sleep( 1 );
errno = 0;
rbuf = rmr_rcv_msg( mrc, rbuf );
if( rbuf && rbuf->state == RMR_OK ) {
- if( rmr_payload_size( rbuf ) > HDR_SIZE+DATA_SIZE ) { // verify that response has a larger payload than we should have sent
+ if( rmr_payload_size( rbuf ) >= HDR_SIZE+DATA_SIZE ) { // vet message
rts_ok += validate_msg( rbuf->payload, rbuf->len );
} else {
+ fprintf( stderr, "<VSNDR> received short response: >%d expected, got %d\n", HDR_SIZE+DATA_SIZE, rmr_payload_size( rbuf ) );
short_count++;
}
+
rcvd_count++;
}
}
}
}
- timeout = time( NULL ) + 2; // allow 2 seconds for the pipe to drain from the receiver
+ timeout = time( NULL ) + 20; // allow 20 seconds for the pipe to drain from the receiver
while( time( NULL ) < timeout ) {
if( rcv_fd >= 0 ) {
while( (nready = epoll_wait( ep_fd, events, 1, 100 )) > 0 ) {
rbuf = rmr_rcv_msg( mrc, rbuf );
if( rbuf && rbuf->state == RMR_OK ) {
rcvd_count++;
- if( rmr_payload_size( rbuf ) > HDR_SIZE+DATA_SIZE ) { // verify that response has a larger payload than we should have sent
+ if( rmr_payload_size( rbuf ) >= HDR_SIZE+DATA_SIZE ) { // vet message
rts_ok += validate_msg( rbuf->payload, rbuf->len );
}
- timeout = time( NULL ) + 2;
+ timeout = time( NULL ) + 10;
}
}
}
}
}
- if( rcvd_count != rts_ok || count != nmsgs ) { // we might not receive all back if receiver didn't retry, so that is NOT a failure here
+ if( (rcvd_count != rts_ok) || (count != nmsgs) ) { // we might not receive all back if receiver didn't retry, so that is NOT a failure here
+ fprintf( stderr, "<VSNDR> recvd=%d rts_ok=%d short=%d count=%d nmsg=%d\n", rcvd_count, rts_ok, short_count, count, nmsgs );
pass = 0;
}