summaryrefslogtreecommitdiff
path: root/tests/api_test/tcp_server.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/api_test/tcp_server.c')
-rw-r--r--tests/api_test/tcp_server.c48
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;