2016-07-25 7 views
0

ソケットfdを使用してTCPパケットを受信し、それをOpenssl BIOに入れたいとします。以下のコード:TCPパケットを受信し、それを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); 

しかし、それは受信N = 227バイト、それが生体内にのみY = 3つのバイトを置きます。どうすれば修正できますか?

+2

恐らく 'BIO_puts'は、Cの文字列で使用するように設計されているため、最初の0バイトで終了します。 – immibis

+0

それを修正するあなたの提案は何ですか? – mitrc

+0

@Heil_Me - ポインタと長さを取る['BIO_write'](http://www.openssl.org/docs/manmaster/crypto/BIO_read.html)を使用してください。これは 'BIO_puts(bio、buffer、n)'のように見えるはずです。 'recv'の戻り値もチェックして、失敗しないことを確認する必要があります。それ以外の場合、 'n'は' -1'になり、 '0xffff ... ffff'に昇格します。 – jww

答えて

関連する問題