Secondo me il problema sta in

char read(struct io x)

in cui la struttura deve essere passata per indirizzo, cioe'

char read(struct io *x)

e quindi utilizzata cosi'

switch(x->port)