Query on BIO_do_accept in openssl server.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




Hi All,
I am new to openssl and I am trying to achieve server client communication using Openssl with BIO interfaces.
 As per my understanding on the man page of BIO_do_accept(BIO *abio), first call to it will set's up accept BIO and Second call to the same is a blocking call and wait for incoming connections. In my server, i am being blocked at first call to BIO_do_accept. What all scenarios will make my call a blocking call?. Thanks for your help.

a part of my Openssl server:

if(BIO_do_accept(server) <= 0)  /* place the underlying socket into listening mode */
{
  cout<<" Error setting up accept\n"<<std::endl;
}
while(1)
{   
  if(BIO_do_accept(server) <= 0)  /* wait for a new connec;tion */
  {
    cout<<" Error in accepting(BIO) the client connections\n"<<std::endl;
  }         
  sclient = BIO_pop(server);/* new_bio now behaves like a BIO_s_socket(  ) BIO */
}

Please let me know if i miss something to give. Complete SSL Server code is attached with the mail.


	int sockfd, portno;	  
    struct sockaddr_in serv_addr;
	const SSL_METHOD *sslMethod;
	SSL_CTX *sCtx;
	BIO *server;	
	BIO *sclient;
	SSL *ssl;
	
	SSL_library_init(); 			
	SSL_load_error_strings();
    OpenSSL_add_ssl_algorithms();
	
	sslMethod = SSLv23_server_method();
	sCtx = SSL_CTX_new(sslMethod);		

	const char *cert_file = "/home/fedora/cert.pem";
	SSL_CTX_use_certificate_file(sCtx,cert_file,SSL_FILETYPE_PEM);
	
	const char *key_file = "/home/fedora/key.pem";
	SSL_CTX_use_PrivateKey_file(sCtx,key_file,SSL_FILETYPE_PEM);
	
	SSL_CTX_check_private_key(sCtx);
	
	sockfd = socket(AF_INET,SOCK_STREAM,0);		
	bzero((char *) &serv_addr, sizeof(serv_addr));
	serv_addr.sin_family = AF_INET;	
	serv_addr.sin_addr.s_addr =  htonl(INADDR_ANY);	
	serv_addr.sin_port = htons(portno);	
	bind(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr);
	listen(sockfd,NO_CLIENTS);
	
	ssl = SSL_new(sCtx);
	char* portnum=new char[sizeof(portno)];
	snprintf(portnum,sizeof(portno)+1,"%d",portno);
	
	BIO_set_bind_mode(server,BIO_BIND_REUSEADDR);	

	server =  BIO_new_accept(portnum);
	BIO_set_fd(server, sockfd, BIO_NOCLOSE);

	if(BIO_do_accept(server) <= 0)  /* place the underlying socket into listening mode */
	{
		cout<<" Error setting up accept\n"<<std::endl;
	}	
	while(1)
	{	
		if(BIO_do_accept(server) <= 0)  /* wait for a new connec;tion */
		{
			cout<<" Error in accepting(BIO) the client connections\n"<<std::endl;
		}				
		sclient = BIO_pop(server);/* new_bio now behaves like a BIO_s_socket(  ) BIO */
		BIO_free(sclient);	
	}
	BIO_free(server);
-- 
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux