github.com/gojue/ecapture@v0.8.2/tests/issue_463/main.c (about)

     1  #include <stdio.h>
     2  #include <stdlib.h>
     3  #include <string.h>
     4  #include <unistd.h>
     5  #include <openssl/ssl.h>
     6  #include <openssl/err.h>
     7  #include <sys/types.h>
     8  #include <sys/socket.h>
     9  #include <netinet/in.h>
    10  #include <arpa/inet.h>
    11  #include <unistd.h>
    12  
    13  #define SERVER "127.0.0.1"
    14  #define PORT 443
    15  #define REQUEST "GET / HTTP/1.1\r\nHost: www.cnxct.com\r\n\r\n"
    16  //#define TEST_CNT 10000000
    17  #define TEST_CNT 1
    18  
    19  char g_requests[TEST_CNT][strlen(REQUEST) + 1];
    20  int create_socket(const char *host, int port) {
    21      int sockfd;
    22      struct sockaddr_in dest_addr;
    23  
    24      sockfd = socket(AF_INET, SOCK_STREAM, 0);
    25      if (sockfd == -1) {
    26          perror("socket");
    27          exit(EXIT_FAILURE);
    28      }
    29  
    30      dest_addr.sin_family = AF_INET;
    31      dest_addr.sin_port = htons(port);
    32      dest_addr.sin_addr.s_addr = inet_addr(host);
    33  
    34      memset(&(dest_addr.sin_zero), '\0', 8);
    35  
    36      if (connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)) == -1) {
    37          perror("connect");
    38          exit(EXIT_FAILURE);
    39      }
    40  
    41      return sockfd;
    42  }
    43  
    44  void init_request() {
    45      int i;
    46      for (i = 0; i < TEST_CNT; i++) {
    47          memcpy(g_requests[i], REQUEST, strlen(REQUEST));
    48      }
    49  
    50  }
    51  
    52  int main() {
    53      SSL_CTX *ctx;
    54      SSL *ssl;
    55      int server;
    56      char reply[4096];
    57  
    58      SSL_library_init();
    59      SSL_load_error_strings();
    60      OpenSSL_add_all_algorithms();
    61  
    62      ctx = SSL_CTX_new(TLS_client_method());
    63      if (ctx == NULL) {
    64          ERR_print_errors_fp(stderr);
    65          exit(EXIT_FAILURE);
    66      }
    67  
    68      server = create_socket(SERVER, PORT);
    69      ssl = SSL_new(ctx);
    70      SSL_set_fd(ssl, server);
    71      SSL_connect(ssl);
    72  
    73      init_request();
    74      int request_len = strlen(REQUEST);
    75  
    76      // Perform SSL_write performance test
    77      int i;
    78      for (i = 0; i < TEST_CNT; i++) {
    79          char *request = g_requests[i];
    80          int bytes_written = SSL_write(ssl, request, request_len);  // Perform SSL_write
    81          if (bytes_written <= 0) {
    82              fprintf(stderr, "SSL_write failed\n");
    83              ERR_print_errors_fp(stderr);
    84              break;
    85          }
    86      }
    87  
    88      int bytes_read = SSL_read(ssl, reply, sizeof(reply));  // Read server response
    89      fprintf(stderr, "received %d bytes",bytes_read);
    90  
    91      SSL_free(ssl);
    92      close(server);
    93      SSL_CTX_free(ctx);
    94      return 0;
    95  }