为了理解type="text/css"
,我在<style>
上下载了type="text/javascript"
,并使用<script>
SSL/TLS
OpenSSL-1.0.2k
编译器进行了编译。我从OpenSSL server/client example in c获取了Windows-7
服务器/客户端的示例,并使用Cygwin
进行了编译。第一次编译成功。我使用以下命令从gcc
执行了服务器和客户端。
64 bit
客户端退出时没有任何响应,但另一方面,服务器显示它已建立连接,例如;
off-the-shelf
无限地等待下一行。
然后我开始调试服务器端,发现程序cygwin gcc
中的cmd
返回值(Server) D:\>ssl-server.exe 5000
(Client) D:\>ssl-client.exe 127.0.0.1 5000
,这是不期望的。我咨询了Connection: 127.0.0.1:50475
openSSL DOC的文档;
TLS / SSL握手未成功,因为在协议级别发生致命错误或发生连接失败。关机不干净。它还可以发生动作,需要继续操作非阻塞BIO。使用返回值ret调用SSL_get_error()以找出原因。
SSL_accept()
返回void Servlet(SSL* ssl)
。我在调用后立即检查了-1
的值,并看到了OpenSSL
。完整的SSL_get_error()
方法代码如下。其余代码与链接相同。
SSL_ERROR_SYSCALL
答案 0 :(得分:2)
SSL_get_error()
的值,以便开始调试。而不是只是举手。SSL_ERROR_SYSCALL
。你没有抓住你认为应该去的地方,因为case (SSL_ERROR_SYSCALL || SSL_ERROR_SSL || SSL_ERROR_WANT_CONNECT || SSL_ERROR_WANT_ACCEPT):
没有按你的想法行事。由于case 1
的语义,它将变为||
。每个值都应该有单独的case
语句。errno
,根据您自己引用的文档,这意味着您应该跟踪 。而不是只是举手。请注意,在调用任何其他系统调用之前必须执行此操作(例如write()
通过printf()
),因此可能有助于立即保存errno
。 / LI>
errno
打印printf("errno=%d\n", errno)
,但打印错误消息会更有用,您可以使用perror()
执行此操作或printf("error=%s\n", syserror(errno))
。SSL_get_error()
的值不是errno
值,也不是您开始使用的原始值-1。 errno
值来自errno
变量。 SSL_accept()
返回-1,,否则你不应该 / em>的所以完全有可能在这里没有错误。