Sale a tutti. Questo è il codice della mia funzione. Non riesco a capire come mai la query di UPDATE non venga eseguita realmente, anche se tutte le funzioni ritornano i messaggi corretti, come se l'operazione fosse andata a buon fine. Sembra che manchi qualcosa come COMMIT.

codice:
int set_distance(struct sockaddr_in peeraddr, int distance) {

	sqlite3 *db;
	sqlite3_stmt *update_stmt;
	int rc;

	rc = sqlite3_open(DBname, &db);
	if( rc ){
		fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
		sqlite3_close(db);
		return 0;
	}

	static char *sql = "UPDATE peers SET distance = ? WHERE ip = '?' AND port = ?";
	if(sqlite3_prepare(db,sql,-1,&update_stmt,NULL) != SQLITE_OK){
		fprintf(stderr,"Errore durante la preparazione dello statement UPDATE. Error: %s\n", sqlite3_errmsg(db));
		return 0;
	}

	//inserisco i vari campi
	sqlite3_bind_int(update_stmt, 1, distance);
	sqlite3_bind_text(update_stmt, 2, inet_ntoa(peeraddr.sin_addr), -1, SQLITE_TRANSIENT);
	sqlite3_bind_int(update_stmt, 3, ntohs(peeraddr.sin_port));

	int success = sqlite3_step(update_stmt);

	if(success != SQLITE_DONE){
		fprintf(stderr, "Errore durante l'update di 'peers'. Error: %s\n", sqlite3_errmsg(db));
		sqlite3_close(db);
		return 0;
	}

	success = sqlite3_finalize(update_stmt);
	printf("Peer updating succesful!\n");
	sqlite3_close(db);	

	//TODO check if peer already exists
	return 0;
}