cha*_*m15 2 c c++ linux ssl openssl
(gdb) BT
#0 0x040010c2 在 ?? () 来自 /lib/ld-linux.so.2
#1 0x06a14a0b 在 ../sysdeps/unix/syscall-template.S:82 的 write () 中
#2 0x04154ae9 在 ?? () 来自 /lib/i386-linux-gnu/libcrypto.so.1.0.0
来自 /lib/i386-linux-gnu/libcrypto.so.1.0.0 的 BIO_write () 中的 #3 0x041518e4
#4 0x040781f1 在 ?? () 来自 /lib/i386-linux-gnu/libssl.so.1.0.0
#5 0x040785ff 在 ?? () 来自 /lib/i386-linux-gnu/libssl.so.1.0.0
#6 0x04078855 在 ?? () 来自 /lib/i386-linux-gnu/libssl.so.1.0.0
#7 0x04075e28 在 ?? () 来自 /lib/i386-linux-gnu/libssl.so.1.0.0
#8 0x0408d709 in SSL_write () from /lib/i386-linux-gnu/libssl.so.1.0.0
#9 0x0409c451 在 ?? () 来自 /lib/i386-linux-gnu/libssl.so.1.0.0
/lib/i386-linux-gnu/libcrypto.so.1.0.0 中的 BIO_write () 中的 #10 0x041518e4
#11 SSL_Connection_send 中的 0x0814b10f(连接 = 0x9ffbbd0)
...
(gdb) 打印 *连接->bio
$1 = {方法= 0x40ac800,回调= 0,cb_arg = 0x0,init = 1,关闭= 1,标志= 0,retry_reason = 0,num = 0,ptr = 0xa27e768,next_bio = 0x7b84ad0,prev_bio = 0x0,引用= 1 , 读取数 = 904,
num_write = 2870,ex_data = {sk = 0x0,虚拟= 774321733}}
(gdb) 打印 *连接->ssl
$2 = {版本= 769,类型= 4096,方法= 0x40aacc0,rbio = 0x7b84ad0,wbio = 0x7b84ad0,bbio = 0x0,rwstate = 2,in_handshake = 0,handshake_func = 0x40738f0,服务器= 0,new_session = 0,quiet_shutdown = 0 ,
关闭= 0,状态= 3,rstate = 240,init_buf = 0x0,init_msg = 0xf5838e4,init_num = 0,init_off = 0,
packet = 0xf848ebb "\027\003\001\001\330HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *\r\nCache-Control: 私有、无缓存、无存储、必须重新验证\r\n内容类型:text/javascript;字符集=UTF-8\r\nETag:\"cacca674ed49d64124f812372ad59561"...,packet_length = 0,s2 = 0x0,s3 = 0xf3ea410,d1 = 0x0,read_ahead = 0,msg_callback = 0,msg_callback_arg = 0x0,命中= 0,参数= 0x99f82b8,cipher_list = 0x0,
cipher_list_by_id = 0x0,mac_flags = 0,enc_read_ctx = 0xace5438,read_hash = 0xabce1c8,展开= 0x0,enc_write_ctx = 0x9794468,write_hash = 0xc057018,压缩= 0x0,cert = 0xe1f70d8,sid_ct x_长度 = 0,
sid_ctx = '\000' ,会话 = 0x7d54760,generate_session_id = 0,verify_mode = 0,verify_callback = 0,info_callback = 0,error = 0,error_code = 0,psk_client_callback = 0,
psk_server_callback = 0、ctx = 0xae8ce30、调试 = 0、verify_result = 20、ex_data = {sk = 0x0、虚拟 = 0}、client_CA = 0x0、引用 = 1、选项 = 4、模式 = 4、max_cert_list = 102400、first_packet = 0,
client_version = 769,max_send_fragment = 16384,tlsext_debug_cb = 0,tlsext_debug_arg = 0x0,tlsext_hostname = 0x0,servername_done = 0,tlsext_status_type = -1,tlsext_status_expected = 0,
tlsext_ocsp_ids = 0x0,tlsext_ocsp_exts = 0x0,tlsext_ocsp_resp = 0x0,tlsext_ocsp_resplen = -1,tlsext_ticket_expected = 1,tlsext_ecpointformatlist_length = 3,tlsext_ecpointformatlist = 0xac40bc8“”,
tlsext_ellipticcurvelist_length = 50,tlsext_ellipticcurvelist = 0x7b20878“”,tlsext_opaque_prf_input = 0x0,tlsext_opaque_prf_input_len = 0,tlsext_session_ticket = 0x0,tls_session_ticket_ext_cb = 0,
tls_session_ticket_ext_cb_arg = 0x0,tls_session_secret_cb = 0,tls_session_secret_cb_arg = 0x0,initial_ctx = 0xae8ce30,next_proto_negotiated = 0x982fd50“组.历史记录”,
next_proto_negotied_len = 111'o',srtp_profiles = 0x7373656d,srtp_profile = 0x2e656761,tlsext_heartbeat = 1953720648,tlsext_hb_pending = 0,tlsext_hb_seq = 424,重新协商= 1232,s rp_ctx = {
SRP_cb_arg = 0x0,TLS_ext_srp_username_callback = 0x6f697463,SRP_verify_param_callback = 0x64695f6e,SRP_give_srp_client_pwd_callback = 0x4c4f202c,登录= 0x72742e44“”,N = 0x498,g = 0x0, s = 0xa,
B = 0xfc0301,A = 0xfc03,a = 0x0,b = 0x0,v = 0x0,信息 = 0x0,强度 = 0,srp_Mask = 0}}
我试图找出为什么会出错。当我向服务器发出请求时,错误会随机发生(也仅在 Linux 上)。难道是远端关闭了连接(connection->bio->shutdown == 1)?或者它是一个内存错误(next_proto_negotiated = 0x982fd50“Groups.History”...这看起来不像一个协议,尽管 valgrind 没有发现任何内存错误)。
您是否正在进行多线程编程,同时访问不同线程上的套接字?如果是这样,请确保您没有在一个线程上写入它并在另一个线程上关闭它。我以前也犯过这样的错误,也见过这样的崩溃。需要进行一些烦人的重新架构才能将所有 SSL 调用放在一个线程上。