/*
 * call-seq:
 *    conn.setnonblocking(Boolean) -> nil
 *
 * Sets the nonblocking status of the connection. 
 * In the blocking state, calls to PGconn#send_query
 * will block until the message is sent to the server,
 * but will not wait for the query results.
 * In the nonblocking state, calls to PGconn#send_query
 * will return an error if the socket is not ready for
 * writing.
 * Note: This function does not affect PGconn#exec, because
 * that function doesn't return until the server has 
 * processed the query and returned the results.
 * Returns +nil+.
 */
static VALUE
pgconn_setnonblocking(self, state)
        VALUE self, state;
{
        int arg;
        VALUE error;
        PGconn *conn = get_pgconn(self);
        if(state == Qtrue)
                arg = 1;
        else if (state == Qfalse)
                arg = 0;
        else
                rb_raise(rb_eArgError, "Boolean value expected");

        if(PQsetnonblocking(conn, arg) == -1) {
                error = rb_exc_new2(rb_ePGError, PQerrorMessage(conn));
                rb_iv_set(error, "@connection", self);
                rb_exc_raise(error);
        }
        return Qnil;
}