这思绪像风
有时温暖湿润
有时清冷异常
总是不经意间就碰上
还未来得及琢磨
便眼睁睁地看着另外一个我
被它带到不知名的地方
之前的 m_tunnel 不稳定,有多个原因,最主要的,是由于只用一个 tcp 连接 local 跟 remote,免不了协议、数据分割,两边的 socket 状态不容易保证同步, 比如 local 的关闭了,remote 的也要同步关闭,反过来也要保证一样。
之前的处理方法,是用了好几个变量保证状态,搞得好复杂,其实也没有对上,所 以很容易跑飞。现在的处理方法,是 remote 跟着 local 变,local 请求后 remote 才创建 socket 去 connect,双方使用一个几乎不会重复的 magic number 来对标,留着 chann_id 作为资源索引值。
双方不管谁先关闭 socket,都会发送消息给对方,但如果对方的资源池里面没有 对应的 magic number 了,则这个资源就已经被释放了,也就保证了同步,类似虚 拟链路一样。
另外一个问题,比较不容易发现,因为自用的是 MacOSX,默认设置 listen 的 socket 为非阻塞的之后,后面 accept 的 socket 也都是非阻塞的。但是 linux 下面不是这样,需要单独对每个 accept 的 socket 设置为非阻塞才行。
这个版本还将 dns 单独出来了一个线程,避免阻塞主循环的消息接收发送,不过 呢感觉 dns 不太稳定呀。
目前自测单用户是没啥问题了,只是缺乏加密,这个放到 TODO 里面,不定非要完 成了。
五一去了罗浮山,又是马大哈错过了一班整点车,然后又遇到堵车了,到了惠州总 站去罗浮山景区又堵,看到缆车那里排了 2 个小时的长队,于是没上山顶,若是 自己爬上去的话,售票员说要 5 个小时。只好走马观花,看看人潮,把五一就这 样消费掉了。
再找找看有啥好玩的项目吧。