OpenSSL BIOを使用したネットワークプログラミング
スポンサーリンク
このドキュメントの内容は、以下の通りです。
OpenSSL の BIO は、 I/O の抽象化を行います。アプリケーションから I/O の詳細を隠蔽します。
BIO を用いて、I/O を行うことにより、
透過的にSSL コネクションの操作することができます。
サンプルコード
以下のサンプルコードは、SSLには対応していませんので
ご注意ください。
bio.c
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <err.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <openssl/bio.h>
#include <openssl/ssl.h>
#include <openssl/err.h>
#define BUF (1024*8)
void
k_ssl_init ()
{
SSL_load_error_strings ();
ERR_load_BIO_strings ();
OpenSSL_add_all_algorithms ();
}
void
bio_test1 (char *server)
{
k_ssl_init ();
BIO *bio;
bio = BIO_new_connect ( server );
if (NULL == bio)
{
errx ( 1, "bio new connect: %s", server );
}
if ( BIO_do_connect ( bio ) < 0 )
{
ERR_print_errors_fp(stderr);
errx ( 1, "bio do connect" );
}
char buf [ BUF ] = "GET / HTTP/1.0\n\n";
int len = 0;
len = strlen (buf);
if ( BIO_write ( bio, buf, len ) <= 0)
{
if ( ! BIO_should_retry ( bio ) )
{
ERR_print_errors_fp(stderr);
errx ( 1, "bio should retry" );
}
// handle the retry
// not implemented
exit (1);
}
len = sizeof (buf) - 1;
int r = 0;
for ( ; ; )
{
r = BIO_read ( bio, buf, len);
if ( r == 0 )
{
break;
}
if ( r < 0 )
{
// error
ERR_print_errors_fp(stderr);
errx ( 1, "bio read" );
break;
}
buf [ r ] = '\0';
// (void) printf ("%d\n", r );
(void) printf ("%s\n", buf );
}
BIO_reset (bio);
BIO_free_all (bio);
}
int
main (int argc, char *argv[])
{
char *server = "www.yahoo.com:80";
bio_test1 (server);
exit (EXIT_SUCCESS);
}
コンパイル
ssl をリンクします。
gcc -lssl bio.c
実行方法
./a.out
BSD socket と比べて
BSD socket と比べて、お作法的には、多少簡単な気もしますが、こういう使い方だと、あんまり恩恵を受けてる気がしないですね。
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12