You do not say what OS you are running on. Solaris 11 has a known problem with not reporting queued data. This was fixed by SRU-28.
Regards, John Unsworth ________________________________ From: openssl-users <openssl-users-boun...@openssl.org> on behalf of 路连峰 <l...@e-code.net> Sent: Monday, September 23, 2019 4:55 am To: openssl-users Subject: My client can not receive data in blocking mode Hello I'm using openssl as client in blocking mode , i have a problem . Sometimes my program can't receive data , and acctually server has been sent the data to me. I can only receive the data by sending another request . Then the data i expected arrived with a new data sent by server . ------------------------------------------------------------------------------ bool can_read() { if(SSL_pending(m_ssl)) return true; struct timeval tv = {0 , 100}; FD_ZERO(&m_rfds); FD_SET(m_socket.fd(), &m_rfds); int ret = select( m_socket.fd()+1, &m_rfds , NULL, NULL, &tv); return ret > 0 ; } //this is the main process int try_receive(char * buf , int len ) { if( !can_read()) return -1; return SSL_read(m_ssl, buf, len); } ------------------------------------------------------------------------------- Above is my code , my program get `false` from `can_read` although the server has sent response data I really appreciate your help.