summaryrefslogtreecommitdiff
path: root/tests/api_test/tcpserver6.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/api_test/tcpserver6.c')
-rw-r--r--tests/api_test/tcpserver6.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/api_test/tcpserver6.c b/tests/api_test/tcpserver6.c
new file mode 100644
index 0000000..740b04c
--- /dev/null
+++ b/tests/api_test/tcpserver6.c
@@ -0,0 +1,83 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+
+#include <arpa/inet.h>
+
+void error(char *msg) {
+ perror(msg);
+ exit(1);
+}
+
+int main(int argc, char *argv[]) {
+ int sockfd, newsockfd, portno;
+ socklen_t clilen;
+ char buffer[256];
+ struct sockaddr_in6 serv_addr, cli_addr;
+ int n;
+ char client_addr_ipv6[100];
+
+ if (argc < 2) {
+ fprintf(stderr, "Usage: %s \n", argv[0]);
+ exit(0);
+ }
+
+ printf("\nIPv6 TCP Server Started...\n");
+
+ //Sockets Layer Call: socket()
+ sockfd = socket(AF_INET6, SOCK_STREAM, 0);
+ if (sockfd < 0)
+ error("ERROR opening socket");
+
+ bzero((char *) &serv_addr, sizeof(serv_addr));
+ portno = atoi(argv[1]);
+ serv_addr.sin6_flowinfo = 0;
+ serv_addr.sin6_family = AF_INET6;
+ serv_addr.sin6_addr = in6addr_any;
+ serv_addr.sin6_port = htons(portno);
+
+
+ //Sockets Layer Call: bind()
+ if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
+ error("ERROR on binding");
+
+ //Sockets Layer Call: listen()
+ listen(sockfd, 5);
+ clilen = sizeof(cli_addr);
+
+ //Sockets Layer Call: accept()
+ newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
+ if (newsockfd < 0)
+ error("ERROR on accept");
+
+ //Sockets Layer Call: inet_ntop()
+ inet_ntop(AF_INET6, &(cli_addr.sin6_addr),client_addr_ipv6, 100);
+ printf("Incoming connection from client having IPv6 address: %s\n",client_addr_ipv6);
+
+ memset(buffer,0, 256);
+
+ //Sockets Layer Call: recv()
+ n = recv(newsockfd, buffer, 255, 0);
+ if (n < 0)
+ error("ERROR reading from socket");
+
+ printf("Message from client: %s\n", buffer);
+
+ //Sockets Layer Call: send()
+ printf("sending...\n");
+ n = send(newsockfd, "Server got your message", 23+1, 0);
+ if (n < 0)
+ error("ERROR writing to socket");
+
+ //Sockets Layer Call: close()
+ close(sockfd);
+ close(newsockfd);
+
+ return 0;
+}