Beispiel #1
0
/* Always calls free(mm) */
void mongo_message_send(mongo_connection * conn, mongo_message* mm){
    mongo_header head; /* little endian */
    bson_little_endian32(&head.len, &mm->head.len);
    bson_little_endian32(&head.id, &mm->head.id);
    bson_little_endian32(&head.responseTo, &mm->head.responseTo);
    bson_little_endian32(&head.op, &mm->head.op);
    
    MONGO_TRY{
        looping_write(conn, &head, sizeof(head));
        looping_write(conn, &mm->data, mm->head.len - sizeof(head));
    }MONGO_CATCH{
        free(mm);
        MONGO_RETHROW();
    }
    free(mm);
}
/* Always calls free(mm) */
int mongo_message_send(mongo_connection * conn, mongo_message* mm){
    mongo_header head; /* little endian */
    int res;
    bson_little_endian32(&head.len, &mm->head.len);
    bson_little_endian32(&head.id, &mm->head.id);
    bson_little_endian32(&head.responseTo, &mm->head.responseTo);
    bson_little_endian32(&head.op, &mm->head.op);

    res = looping_write(conn, &head, sizeof(head));
    if( res != MONGO_OK ) {
        free( mm );
        return res;
    }

    res = looping_write(conn, &mm->data, mm->head.len - sizeof(head));
    if( res != MONGO_OK ) {
        free( mm );
        return res;
    }

    free( mm );
    return MONGO_OK;
}