20.第一个Netcat的实现

20.第一个Netcat的实现

https://github.com/chenshuo/recipes/blob/master/tpc/bin/netcat.cc

准确说不是每个连接对应一个线程,每个连接对应两个线程,每个线程只管半个连接,管理其中一个方向,收/发,读或者写。

go语言中线程代价低,go routine,channel,select

线程模仿go routine,阻塞队列可以模仿channel

主线程读stdin写socket,另一个线程读socket写stdout

两个线程要么阻塞在read/write上

问题:如何通知另一个线程退出?

进程退出有两个条件,1、读stdin返回0,break 2,读socket返回0,break

阻塞IO有节流限速功能