今天,复习了《SSL与TLS》第八章的内容,主要是使用select()实现多路I/O的部分。
这里主要解决的问题是,当我们的应用要处理多个I/O时,有可能出现的死锁的问题(如该书8.8节所述),在JAVA中,使用多线程机制,可以gracefully处理这个问题,但是在*inux下,使用select去解决时,却会有些麻烦。主要是网络缓冲区和ssl缓冲区有可能出现的不一致的情况,在read时,书中给出的解决方案是通过SSL_pending()进行判断。我理解,pending情况发生的概率还是蛮低的,至少得满足如下条件:
1、ssl_read的值要小于网络缓冲区的长度;
2、没有后续的数据去唤醒select处理;
不知道我的理解是否完全正确,还需要进一步用代码去求证。
另外,网上相关的资料似乎不太多,openssl中不知有没有相关的例子,《SSL与TLS》这本书翻译的也不是让人太满意,翻来覆去的看不太明白,幸好找到了原作者的网站:,里边有相关的例子和描述,有兴趣的朋友可以参考,欢迎讨论。
阅读(2888) | 评论(1) | 转发(0) |