【发布时间】:2015-02-13 20:40:07
【问题描述】:
我使用非阻塞套接字。对于正常的 TCP 连接,我在这里执行以下操作: Non blocking socket - how to check if a connection was successful?
但是对于 SSL_connect 调用,我无法让它工作。
我应该理解它: 1. 反复调用 SSL_connect。 2. 检查 SSL_get_error 是 SSL_ERROR_WANT_READ 还是 SSL_ERROR_WANT_WRITE。 3. 如果是这样,那么我不能 100% 确定下一步该做什么。我应该打电话给 SSL_connect 直到我不明白吗?或者我应该像使用普通套接字一样,使用 read_fds 或 write_fds 使用 select 检查套接字,然后使用 FD_ISSET 检查,如果是这样,使用 SO_ERROR 检查 getsockopt?
基本上,对于 SSL_connect 和非阻塞套接字,是什么告诉我连接成功了? 我看过其他例子,但都不够清楚。
【问题讨论】:
-
您的猜测是正确的:您应该根据操作结果使用
poll或selectapi 等待适当的套接字事件。并重复操作。 -
但是我应该只调用一次 SSL_connect 吗?我在等什么?如果为我的套接字设置了读或写,这是什么意思?我该怎么办?我是否打电话给getsockopt?
-
通常你给
SSL_connect一个连接的socket。该函数不是用于底层连接操作,而是用于安全协议设置。 -
是的,我知道。我可以使用阻塞套接字进行 SSL_connect。但我不确定非阻塞的。我需要的是整个过程的一些伪代码。
标签: select openssl nonblocking