The problem is that the version of telnetd you use can not negotiate out of binary mode and actually has several other subtle bugs in telnet option negotiation. I would recommend getting a newer version of the telnetd code from somewhere, but as a stop-gap adding the following line of code to the end of wontoption() in state.c will fix the problem we are encountering: set_his_state_wont(option);