int main() { /* * Creates a socket that uses an internet IP address, * Sets the type to be Stream based (TCP), * 0 means choose the default protocol. */ /* Identify and access the sockets */ int sockfd = socket(AF_INET, SOCK_STREAM, 0); int exit = 0; /* 0 = false, 1 = true */ /* If positive value, the socket is valid */ if(sockfd < 0){ printf("ERROR: failed to create the socket\n"); return 1; /* Kill the server with exit status 1 */ } /* Server and client socket address structures */ struct sockaddr_in serverAddr, clientAddr; /* Initialize the server address struct to zero */ memset((char *)&serverAddr, 0, sizeof(serverAddr)); /* Fill the server's address family */ serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = INADDR_ANY; serverAddr.sin_port = htons(DEFAULT_PORT); /* Attach the server socket to our port */ if(bind(sockfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0){ printf("ERROR: failed to bind\n"); return 1; } /* Continuously accept connections while not currently in an active connection or told to quit */ while (exit == 0){ /* Listen for a new connection, allow 5 pending connections */ listen(sockfd, 5); printf("Waiting for a connection...\n"); /* Accept client connections and read from them */ exit = AcceptAndRead(sockfd, clientAddr); } /* Close the open sockets */ close(sockfd); return 0; }
int main() { /* * Creates a socket that uses an internet IP address, * Sets the type to be Stream based (TCP), * 0 means choose the default protocol. */ socklen_t sockfd = socket(AF_INET, SOCK_STREAM, 0); int ret = 0; /* Return Variable */ int loopExit = 0; /* 0 = False, 1 = True */ /* Server and Client socket address structures */ struct sockaddr_in serverAddr = {0}, clientAddr = {0}; /* Initialize the server address struct to zero */ memset((char *)&serverAddr, 0, sizeof(serverAddr)); /* Fill the server's address family */ serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = INADDR_ANY; serverAddr.sin_port = htons(DEFAULT_PORT); /* initialize wolfSSL */ wolfSSL_Init(); /* If positive value, the socket is valid */ if (sockfd == -1) { printf("ERROR: failed to create the socket\n"); return EXIT_FAILURE; } /* Create and initialize WOLFSSL_CTX structure */ if ((ctx = wolfSSL_CTX_new(wolfTLSv1_2_server_method())) == NULL) { fprintf(stderr, "wolfSSL_CTX_new error.\n"); return EXIT_FAILURE; } /* Load server certificate into WOLFSSL_CTX */ if (wolfSSL_CTX_use_certificate_file(ctx, "../certs/server-cert.pem", SSL_FILETYPE_PEM) != SSL_SUCCESS) { fprintf(stderr, "Error loading certs/server-cert.pem, please check" "the file.\n"); return EXIT_FAILURE; } /* Load server key into WOLFSSL_CTX */ if (wolfSSL_CTX_use_PrivateKey_file(ctx, "../certs/server-key.pem", SSL_FILETYPE_PEM) != SSL_SUCCESS) { fprintf(stderr, "Error loading certs/server-key.pem, please check" "the file.\n"); return EXIT_FAILURE; } /* Attach the server socket to our port */ if (bind(sockfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) { printf("ERROR: failed to bind\n"); return EXIT_FAILURE; } printf("Waiting for a connection...\n"); /* Continuously accept connects while not currently in an active connection or told to quit */ while (loopExit == 0) { /* Listen for a new connection, allow 5 pending connections */ ret = listen(sockfd, 5); if (ret == 0) { /* Accept client connections and read from them */ loopExit = AcceptAndRead(sockfd, clientAddr); } } wolfSSL_CTX_free(ctx); /* Free WOLFSSL_CTX */ wolfSSL_Cleanup(); /* Free wolfSSL */ return EXIT_SUCCESS; }
int main() { /* * Creates a socket that uses an internet IP address, * Sets the type to be Stream based (TCP), * 0 means choose the default protocol. */ socklen_t socketfd = socket(AF_INET, SOCK_STREAM, 0); int loopExit = 0; /* 0 = False, 1 = True */ int ret = 0; int on = 1; /* Create a ctx pointer for our ssl */ CYASSL_CTX* ctx; /* Server and Client socket address structures */ struct sockaddr_in serverAddr, clientAddr; /* Initialize the server address struct to zero */ memset((char *)&serverAddr, 0, sizeof(serverAddr)); /* Fill the server's address family */ serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = INADDR_ANY; serverAddr.sin_port = htons(DEFAULT_PORT); socklen_t len = sizeof(on); /* If positive value, the socket is valid */ if (socketfd == -1) { printf("ERROR: failed to create the socket\n"); exit(EXIT_FAILURE); /* Kill the server with exit status 1 */ } /* Set the sockets options for use with nonblocking i/o */ if (setsockopt(socketfd, SOL_SOCKET, SO_REUSEADDR, &on, len) < 0) printf("setsockopt SO_REUSEADDR failed\n"); /* Initialize CyaSSL */ CyaSSL_Init(); /* Create and initialize CYASSL_CTX structure */ if ((ctx = CyaSSL_CTX_new(CyaTLSv1_2_server_method())) == NULL) { fprintf(stderr, "CyaSSL_CTX_new error.\n"); exit(EXIT_FAILURE); } /* Load server certificate into CYASSL_CTX */ if (CyaSSL_CTX_use_certificate_file(ctx, "../certs/server-cert.pem", SSL_FILETYPE_PEM) != SSL_SUCCESS) { fprintf(stderr, "Error loading certs/server-cert.pem, please check" "the file.\n"); exit(EXIT_FAILURE); } /* Load server key into CYASSL_CTX */ if (CyaSSL_CTX_use_PrivateKey_file(ctx, "../certs/server-key.pem", SSL_FILETYPE_PEM) != SSL_SUCCESS) { fprintf(stderr, "Error loading certs/server-key.pem, please check" "the file.\n"); exit(EXIT_FAILURE); } /* Attach the server socket to our port */ if (bind(socketfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) { printf("ERROR: failed to bind\n"); exit(1); } printf("Waiting for a connection...\n"); /* Continuously accept connects while not currently in an active connection or told to quit */ while (loopExit == 0) { /* listen for a new connection, allow 5 pending connections */ ret = listen(socketfd, 5); if (ret == 0) { /* Accept client connections and read from them */ loopExit = AcceptAndRead(ctx, socketfd, clientAddr); } } CyaSSL_CTX_free(ctx); /* Free CYASSL_CTX */ CyaSSL_Cleanup(); /* Free CyaSSL */ exit(EXIT_SUCCESS); }