我試圖使用OpenSSL TLS套接字讀取一大塊資料,但我總是卡在16384被讀取。我怎樣才能讀到更多呢?
SSL_CTX* ctx;
int server。
SSL* ssl。
int bytes;
std::string result;
std::vector<char> buffer(999999)。
ctx = InitCTX()。
server = OpenConnection();
ssl = SSL_new(ctx)。
SSL_set_fd(ssl, server)。
if (SSL_connect(ssl) !=-1)
{
std::string msg = 0; //request here
SSL_write(ssl, msg.c_str(), msg.size()。
bytes = SSL_read(ssl, &buffer[0], buffer.size()。
}
result.append(buffer.cbegin(), buffer.cend() 。)
uj5u.com熱心網友回復:
TLS協議將資料封裝在記錄中,這些記錄是單獨加密和認證的。記錄的最大有效載荷為16 kB(減去幾個位元組),并且SSL_read()一次只能處理一條記錄。
我建議你將buffer的大小改為16384位元組以匹配。請注意,無論如何,像你這樣分配 ~1 GB 是太多了,因為這個數量的記憶體將有可能無法被其他行程使用。
然后,正如 rustyx 在評論中提到的那樣,只需在一個回圈中讀取更多資訊。如果對方可以用多條記錄進行回應,那么如果它能以某種方式在第一條記錄中發送回應的大小就更好了,這樣你就能知道要讀多少了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/311838.html
標籤:
上一篇:socket.io的CORS問題
