socket-handler: don't disconnect on slow client writes

If a socket client is slow to receive data from the console server, we
start filling a buffer. Currently, if we have more data to send and the
buffer is full, we disconnect the client.

Instead, this change will start performing blocking writes to the client
if the buffer becomes full. This means we'll rate-limit the console data
(including reads from the tty device) instead of disconnecting. This
gives us a little flow control of tty data.

Fixes openbmc/obmc-console#9 .

Change-Id: Icf8ff7246f9ba776ff6fd76a25156ddd89d271d9
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
1 file changed
tree: 4f9b04720f1374ad425c78865043fe8e7e8a6a92
  1. test/
  2. .travis.yml
  3. bootstrap.sh
  4. config.c
  5. configure.ac
  6. console-client.c
  7. console-server.c
  8. console-server.h
  9. console-socket.c
  10. LICENSE
  11. log-handler.c
  12. Makefile.am
  13. obmc-console.conf.sample
  14. README.md
  15. socket-handler.c
  16. tty-handler.c
  17. util.c
README.md

To Build

Note: In addition to a toolchain and autoconf tools, this requires autotools-archive to be installed.

To build this project, run the following shell commands:

./bootstrap.sh
./configure ${CONFIGURE_FLAGS}
make

To fully clean the repository, run:

./bootstrap.sh clean

To Run Server

Running the server requires a serial port (e.g. /dev/ttyS0):

touch obmc-console.conf
./obmc-console-server --config obmc-console.conf ttyS0

To Connect Client

To connect to the server, simply run the client:

./obmc-console-client

To disconnect the client, use the standard ~. combination.