2016-07-25 10 views
0

Ich möchte ein TCP-Paket mit Socket FD erhalten und es in OpenSSL BIO. Der folgende Code:Empfangen Sie ein TCP-Paket und steckte es in Openssl BIO_mem

char buffer[256]; 
n = recv(fd, buffer, 256, 0); 
BIO* bio = BIO_new(BIO_s_mem()); 
int y = BIO_puts(bio, buffer); 

Aber es erhalten n = 227 Bytes und es setzen nur y = 3 Bytes in Bio. Wie kann ich es reparieren?

+2

Wahrscheinlich "BIO_puts" stoppt bei den ersten 0 Byte, weil es für die Verwendung mit C-Strings entwickelt wurde. – immibis

+0

Also, was ist dein Vorschlag, um es zu beheben? – mitrc

+0

@Heil_Me - Verwenden Sie ['BIO_write'] (http://www.openssl.org/docs/manmaster/crypto/BIO_read.html), das einen Zeiger und eine Länge benötigt. Es sollte etwa so aussehen: 'BIO_puts (bio, buffer, n)'. Sie sollten auch den Rückgabewert von 'recv' überprüfen, um sicherzustellen, dass es nicht fehlschlägt. Andernfalls wird 'n' wahrscheinlich' -1' sein, was zu '0xffff ... ffff' befördert wird. – jww

Antwort

0

Dank jww und Remy Lebeau. Mein Problem gelöst, wie sie mit diesem folgenden Code sagten: