diff options
Diffstat (limited to 'tests/api_test/tcp_server.c')
| -rw-r--r-- | tests/api_test/tcp_server.c | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/tests/api_test/tcp_server.c b/tests/api_test/tcp_server.c index 81dd26e..2b7d553 100644 --- a/tests/api_test/tcp_server.c +++ b/tests/api_test/tcp_server.c @@ -11,35 +11,55 @@ int atoi(const char *str); int main(int argc , char *argv[]) { if(argc < 2) { - printf("usage: tcp_server <port>\n"); + printf("usage: tcp_server <4/6> <port>\n"); + printf("\t - where 4/6 represent IP version\n"); return 0; } - int socket_desc, client_sock, c, read_size, port = atoi(argv[1]); - struct sockaddr_in server , client; + + int sock, client_sock, c, read_size, ipv = atoi(argv[1]), port = atoi(argv[2]); char client_message[2000]; - socket_desc = socket(AF_INET , SOCK_STREAM , 0); - if (socket_desc == -1) { - printf("could not create socket"); - return 0; + struct sockaddr_storage server, client; + struct sockaddr_in6 *server6 = (struct sockaddr_in6 *)&server; + struct sockaddr_in *server4 = (struct sockaddr_in *)&server; + + // IPV4 + if(ipv == 4) + { + printf("ipv4 mode\n"); + if((sock = socket(AF_INET, SOCK_STREAM , 0)) < 0) { + printf("could not create socket"); + return 0; + } + server4->sin_family = AF_INET; + server4->sin_addr.s_addr = INADDR_ANY; + server4->sin_port = htons(port); + } + // IPV6 + if(ipv == 6) + { + printf("ipv6 mode\n"); + if((sock = socket(AF_INET6, SOCK_STREAM , 0)) < 0) { + printf("could not create socket"); + return 0; + } + server6->sin6_family = AF_INET6; + server6->sin6_addr = in6addr_any; + server6->sin6_port = htons(port); } - - server.sin_family = AF_INET; - server.sin_addr.s_addr = INADDR_ANY; - server.sin_port = htons(port); printf("binding on port %d\n", port); - if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0) { + if( bind(sock,(struct sockaddr *)&server , sizeof(server)) < 0) { perror("bind failed. Error"); return 0; } printf("listening\n"); - listen(socket_desc , 3); + listen(sock , 3); printf("waiting to accept\n"); c = sizeof(struct sockaddr_in); - client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c); + client_sock = accept(sock, (struct sockaddr *)&client, (socklen_t*)&c); if (client_sock < 0) { perror("accept failed"); return 0; |
