2013-05-28 61 views
0

我的問題是我可以收到下面的代碼的一半的消息? 如果我想發送如下消息:「MESSAGE \ n」 發生這種情況如果頻道緩慢,我只收到M字符?通過ssl通道接收一半的消息c

和部分代碼:

fd.fd = c->socket; 
fd.events = POLLIN; 
bzero(received, sizeof(received)); 

result = poll(&fd, 1, time); 
if(result > 0) 
{ 
    i = SSL_read ((SSL *)c->sslHandle, (char*)received, INCOMING_BUFFERSIZE); 
    result = SSL_get_error(c->sslHandle, i); 
    ... 
} 

因爲我雖然我什麼也得不到,直到沒有收到「\ n」個符號。

如何確保我僅在\ n結束時接受消息。

感謝幫助,

塔馬斯

編輯:我使用的版本是1.0.1c

回答

0

插座是基於流的,這意味着你得到字節流沒有信息。因此,通過一次recv()調用,您可以從1發送到您發送的所有數據字節。您需要將數據放入一些中間緩衝區並分析緩衝區中的某些標記(在您的情況下爲\ n)。

+0

我閱讀說明書的手冊: 數據在記錄中接收(SSLv3/TLSv1的最大記錄大小爲16kB)。只有當一個記錄被完全接收後,它才能被處理(解密和完整性檢查)。因此,我想如果我寫了一條消息,比如「MESSAGE \ n」,我必須得到這個或者什麼都不收。這是真的嗎? – Tomi

+0

@Tomi是關於SSL/TLS記錄,而不是關於您的消息。而SSL層不瞭解數據流的分區。 –

相關問題