OpenSSL上的Windows选择API 我有一个要求,我的服务器(使用OpenSSL的Windows C++)将听客户的“N”个数,并根据客户机请求异步响应。为此,我计划使用selectapi调用。但OpenSSL似乎不适用于SELECTAPI调用。所以我想知道是否还有其他方法可以实现这个功能
非常感谢您在这方面提供的任何帮助。OpenSSL与OpenSSL上的Windows选择API 我有一个要求,我的服务器(使用OpenSSL的Windows C++)将听客户的“N”个数,并根据客户机请求异步响应。为此,我计划使用selectapi调用。但OpenSSL似乎不适用于SELECTAPI调用。所以我想知道是否还有其他方法可以实现这个功能,windows,select,openssl,Windows,Select,Openssl,非常感谢您在这方面提供的任何帮助。OpenSSL与select()配合使用,但诀窍在于知道何时使用select()。例如,在读取数据时,传统的非阻塞套接字逻辑是先调用select(),然后在select()表示有数据要读取时调用recv()。这不适用于传统的OpenSSL API!您需要先调用ssl\u read(),然后调用select()以等待可读性,只有当ssl\u read()报告ssl\u ERROR\u WANT\u read错误时。换句话说,这是等待准备就绪然后采取行动与采取行动然
select()
配合使用,但诀窍在于知道何时使用select()
。例如,在读取数据时,传统的非阻塞套接字逻辑是先调用select()
,然后在select()
表示有数据要读取时调用recv()
。这不适用于传统的OpenSSL API!您需要先调用ssl\u read()
,然后调用select()
以等待可读性,只有当ssl\u read()
报告ssl\u ERROR\u WANT\u read
错误时。换句话说,这是等待准备就绪然后采取行动与采取行动然后等待就绪之间的区别。而且有可能ssl\u read()
会报告ssl\u错误\u WANT\u WRITE
错误,在这种情况下,您必须调用select()
来检查可写性。是的,读操作可以触发写操作
对于ssl\u send()
和ssl\u ERROR\u WANT\u WRITE
进行写入,以及ssl\u ERROR\u WANT\u READ
进行读取,都需要类似的考虑。是的,写操作可以触发读操作
您真的无法在现有的非SSL套接字实现之上移植传统的OpenSSL,至少不需要额外的工作。这是可以做到的(我已经做到了),但并不容易。传统的OpenSSL有其自己的逻辑,几乎落后于传统的套接字逻辑
如果您有一个现有的套接字实现,并且只想在其中添加SSL/TLS,而不需要太多麻烦,那么您有两个选择: