スポンサーリンク

このドキュメントの内容は、以下の通りです。

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 と比べて、お作法的には、多少簡単な気もしますが、こういう使い方だと、あんまり恩恵を受けてる気がしないですね。

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 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

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー