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 }