sockchat: almost-complete