diff options
Diffstat (limited to 'app_example')
-rw-r--r-- | app_example/CMakeLists.txt | 18 | ||||
-rw-r--r-- | app_example/func-test/CMakeLists.txt | 18 | ||||
-rw-r--r-- | app_example/func-test/file_transfer/CMakeLists.txt | 32 | ||||
-rw-r--r-- | app_example/func-test/file_transfer/client_filetrans.c | 284 | ||||
-rw-r--r-- | app_example/func-test/file_transfer/server_filetrans.c | 344 | ||||
-rw-r--r-- | app_example/func-test/fork/CMakeLists.txt | 32 | ||||
-rw-r--r-- | app_example/func-test/fork/tcpclient.c | 173 | ||||
-rw-r--r-- | app_example/func-test/fork/tcpserver.c | 161 | ||||
-rw-r--r-- | app_example/perf-test/CMakeLists.txt | 47 | ||||
-rw-r--r-- | app_example/perf-test/multi_tcp_common_Ser.c | 544 | ||||
-rw-r--r-- | app_example/perf-test/multi_tcp_common_app_Cli.c | 396 | ||||
-rw-r--r-- | app_example/perf-test/multi_tcp_epoll_app_Ser.c | 632 | ||||
-rw-r--r-- | app_example/perf-test/multi_tcp_select_app_Ser.c | 436 |
13 files changed, 0 insertions, 3117 deletions
diff --git a/app_example/CMakeLists.txt b/app_example/CMakeLists.txt deleted file mode 100644 index a82c752..0000000 --- a/app_example/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -######################################################################### -# -# Copyright (c) 2018 Huawei Technologies Co.,Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -######################################################################### - -ADD_SUBDIRECTORY(perf-test) -ADD_SUBDIRECTORY(func-test) diff --git a/app_example/func-test/CMakeLists.txt b/app_example/func-test/CMakeLists.txt deleted file mode 100644 index 865eba5..0000000 --- a/app_example/func-test/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -######################################################################### -# -# Copyright (c) 2018 Huawei Technologies Co.,Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -######################################################################### - -ADD_SUBDIRECTORY(fork) -ADD_SUBDIRECTORY(file_transfer) diff --git a/app_example/func-test/file_transfer/CMakeLists.txt b/app_example/func-test/file_transfer/CMakeLists.txt deleted file mode 100644 index 408fc7a..0000000 --- a/app_example/func-test/file_transfer/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -######################################################################### -# -# Copyright (c) 2018 Huawei Technologies Co.,Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -######################################################################### -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -g -fPIC -m64 -mssse3 -std=gnu89") - -LINK_DIRECTORIES(${LIB_PATH_SHARED} ${LIB_PATH_STATIC}) - -ADD_EXECUTABLE(vc_serv_file server_filetrans.c) -ADD_DEPENDENCIES(vc_serv_file nStackAPI) -TARGET_LINK_LIBRARIES(vc_serv_file libnStackAPI.so -lpthread -lrt) - -ADD_EXECUTABLE(vc_cli_file client_filetrans.c) -ADD_DEPENDENCIES(vc_cli_file nStackAPI) -TARGET_LINK_LIBRARIES(vc_cli_file libnStackAPI.so -lpthread -lrt) - -ADD_EXECUTABLE(kc_serv_file server_filetrans.c) -TARGET_LINK_LIBRARIES(kc_serv_file pthread) - -ADD_EXECUTABLE(kc_cli_file client_filetrans.c) -TARGET_LINK_LIBRARIES(kc_cli_file pthread)
\ No newline at end of file diff --git a/app_example/func-test/file_transfer/client_filetrans.c b/app_example/func-test/file_transfer/client_filetrans.c deleted file mode 100644 index cc8386d..0000000 --- a/app_example/func-test/file_transfer/client_filetrans.c +++ /dev/null @@ -1,284 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/types.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <fcntl.h> -#include <netdb.h> -#include <ctype.h> -char *END_FLAG = "=================END"; -#define HEXCONVERT_COLS 8 -#define HEX_CONVERT 1 -//#define DEBUG 1 -#define out(fmt, arg...) (void)printf(fmt, ##arg) - -#ifdef DEBUG -#define DBG(fmt, arg...) do { \ - out("[Debug] " fmt, ##arg); \ - } while (0) -#else -#define DBG(fmt, arg...) ((void)0) -#endif - -void -error (const char *msg) -{ - perror (msg); - out - ("./client_tcp [server_ip_address] [port number] [filename] [client_ip_address]\n"); - exit (1); -} - -#if defined(HEX_CONVERT) && defined(DEBUG) -void -hexconvert (void *mem, unsigned int len) -{ - unsigned int i; - - for (i = 0; - i < - len + - ((len % HEXCONVERT_COLS) ? (HEXCONVERT_COLS - - len % HEXCONVERT_COLS) : 0); i++) - { - /* print offset */ - if (i % HEXCONVERT_COLS == 0) - { - DBG ("\n0x%06x: ", i); - } - - /*print hex data */ - if (i < len) - { - DBG ("%02x ", 0xFF & ((char *) mem)[i]); - } - else /* end of block, just aligning for ASCII dump */ - { - DBG ("\n"); - } - } -} -#endif - -void -tcp (char **pArgv) -{ - - int sockfd, portno; - char buff[1024]; - - struct sockaddr_in serv_addr, cli_addr; - struct hostent *server; - - sockfd = socket (AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) - { - error ("error in socket creation\n"); - } - out ("socket create successful\n"); - - portno = atoi (pArgv[2]); - server = gethostbyname (pArgv[1]); - - if (server == NULL) - { - fprintf (stderr, "error no such host\n"); - } - - bzero ((char *) &serv_addr, sizeof (serv_addr)); - serv_addr.sin_family = AF_INET; - bcopy ((char *) server->h_addr, (char *) &serv_addr.sin_addr, - server->h_length); - serv_addr.sin_port = htons (portno); - bzero ((char *) &cli_addr, sizeof (serv_addr)); - - cli_addr.sin_family = AF_INET; - cli_addr.sin_addr.s_addr = inet_addr (pArgv[4]); - cli_addr.sin_port = htons (portno); - if (bind (sockfd, (struct sockaddr *) &cli_addr, sizeof (cli_addr)) < 0) - { - error ("bind fail"); - } - out ("Bind successful\n"); - - if (connect (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) < - 0) - { - error ("connection fail"); - } - out ("connection done\n"); - - FILE *file; - int filebyte = 0; - int lsize, totalsize = 0; - - file = fopen (pArgv[3], "r"); - fseek (file, 0, SEEK_END); - lsize = ftell (file); - rewind (file); - out ("Name of file: %s, Size of file : %d\n", pArgv[3], lsize); - if (write (sockfd, &lsize, sizeof (int)) == -1) - { - out ("error executing write\n"); - } - if (write (sockfd, pArgv[3], 255) == -1) - { - out ("error executing write\n"); - } - while (lsize > totalsize) - { - bzero (buff, 1024); - fseek (file, totalsize, SEEK_SET); - filebyte = fread (buff, 1, sizeof (buff), file); - if (filebyte == 0) - { - printf ("file End of file\n"); - break; - } - - if (filebyte < 0) - error ("error in reading file. \n"); -#if defined(HEX_CONVERT) && defined(DEBUG) - DBG ("=========================================\n"); - hexconvert (buff, filebyte); - DBG ("=========================================\n"); -#endif - - void *p = buff; - totalsize += filebyte; - - while (filebyte > 0) - { -#ifdef DEBUG - DBG ("=========================================\n"); - puts ((const char *) p); - DBG ("=========================================\n"); -#endif - int bytes_written = write (sockfd, p, filebyte); - if (bytes_written <= 0) - { - error ("error in Socket write.\n"); - } - - filebyte -= bytes_written; - p += bytes_written; -//#if DEBUG - DBG - ("Total size of file = %d, Total Bytes sent to socket = %d, bytes_written in each step = %d\n", - lsize, totalsize, bytes_written); -//#endif - } - } - out ("file has been sent successfully\n"); - out ("Final Total size of file = %d, Total Bytes sent to socket = %d\n", - lsize, totalsize); - - fclose (file); - sleep (60); - close (sockfd); - return; -} - -void -udp (char **pArgv) -{ - int sockfd, n, fd, sz, portno, MAXLINE; - FILE *fp; - struct sockaddr_in servaddr, cliaddr; - char *buf; - char *target, *path; - portno = atoi (pArgv[2]); - bzero (&servaddr, sizeof (servaddr)); - servaddr.sin_family = AF_INET; - servaddr.sin_port = htons (portno); - servaddr.sin_addr.s_addr = inet_addr (pArgv[1]); - bzero (&cliaddr, sizeof (servaddr)); - cliaddr.sin_family = AF_INET; - cliaddr.sin_port = htons (portno); - cliaddr.sin_addr.s_addr = inet_addr (pArgv[3]); - sockfd = socket (AF_INET, SOCK_DGRAM, 0); - if (sockfd < 0) - { - out ("error in socket creation\n"); - } - out ("socket create successful\n"); - - if (bind (sockfd, (struct sockaddr *) &cliaddr, sizeof (cliaddr)) < 0) - { - out ("bind fail"); - } - out ("Bind successful\n"); - - path = pArgv[4]; - target = pArgv[5]; - MAXLINE = atoi (pArgv[6]); - buf = malloc (MAXLINE * sizeof (int)); - fp = fopen (path, "r"); - fseek (fp, 0L, SEEK_END); - sz = ftell (fp); - out ("The size of the path file is %d", sz); - sendto (sockfd, target, strlen (target), 0, - (struct sockaddr *) &servaddr, sizeof (servaddr)); - n = recvfrom (sockfd, buf, MAXLINE, 0, NULL, NULL); - if (!strncmp (buf, "ok", 2)) - { - out ("Filename sent.\n"); - } - - fd = open (path, O_RDONLY); - while ((n = read (fd, buf, MAXLINE)) > 0) - { - sendto (sockfd, buf, n, 0, (struct sockaddr *) &servaddr, - sizeof (servaddr)); - } - sendto (sockfd, END_FLAG, strlen (END_FLAG), 0, - (struct sockaddr *) &servaddr, sizeof (servaddr)); - fclose (fp); - sleep (60); - close (sockfd); - return; -} - -int -main (int argc, char *argv[]) -{ - int i; - char **pArgv, str[10]; - pArgv = (char **) malloc (sizeof (char *) * 10); - for (i = 0; i < 10; i++) - { - pArgv[i] = (char *) malloc (sizeof (char) * 20); - } - printf ("%s", argv[1]); - - if (strcmp ("tcp", argv[1]) == 0) - { - strcpy (pArgv[0], "tcp"); - printf ("pArgv[0]=%s", pArgv[0]); - /* The arguments of tcp are [server_ip_address] [port number] [filename] [client_ip_address] */ - for (i = 1; i < 5; i++) - { - strcpy (pArgv[i], argv[i + 1]); - } - tcp (pArgv); - } - - else - { - strcpy (str, argv[1]); - if (strcmp ("udp", str) == 0) - { - strcpy (pArgv[0], "udp"); - printf ("pArgv[0]=%s", pArgv[0]); - /* The arguments of udp are [server_ip_address] [port number] [client_ip_address] [filename] [target_filename] [MAX_BUFFER_LENGTH] */ - for (i = 1; i < 7; i++) - { - strcpy (pArgv[i], argv[i + 1]); - } - udp (pArgv); - } - } - return 0; -} diff --git a/app_example/func-test/file_transfer/server_filetrans.c b/app_example/func-test/file_transfer/server_filetrans.c deleted file mode 100644 index 9463c70..0000000 --- a/app_example/func-test/file_transfer/server_filetrans.c +++ /dev/null @@ -1,344 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/types.h> -#include <netinet/in.h> -#include <netdb.h> -#include <ctype.h> -#include <arpa/inet.h> -#include <fcntl.h> -char *END_FLAG = "=================END"; -#define HEXCONVERT_COLS 8 -#define HEX_CONVERT 1 -//#define DEBUG 1 -#define out(fmt, arg...) (void)printf(fmt, ##arg) - -#ifdef DEBUG -#define DBG(fmt, arg...) do { \ - out("[Debug] " fmt, ##arg); \ - } while (0) -#else -#define DBG(fmt, arg...) ((void)0) -#endif - -void -error (const char *msg) -{ - perror (msg); - out ("./server_tcp [server_ip_address] [port number]\n"); - exit (1); -} - -#if defined(HEX_CONVERT) && defined(DEBUG) -void -hexconvert (void *mem, unsigned int len) -{ - unsigned int i; - - for (i = 0; - i < - len + - ((len % HEXCONVERT_COLS) ? (HEXCONVERT_COLS - - len % HEXCONVERT_COLS) : 0); i++) - { - /* print offset */ - if (i % HEXCONVERT_COLS == 0) - { - DBG ("\n0x%06x: ", i); - } - - /*print hex data */ - if (i < len) - { - DBG ("%02x ", 0xFF & ((char *) mem)[i]); - } - else /* end of block, just aligning for ASCII dump */ - { - DBG ("\n"); - } - } -} -#endif -int -compareFiles (FILE * fp1, FILE * fp2) -{ - - char ch1 = getc (fp1); - char ch2 = getc (fp2); - int error = 0, pos = 0, line = 1; - - while (ch1 != EOF && ch2 != EOF) - { - pos++; - if (ch1 == '\n' && ch2 == '\n') - { - line++; - pos = 0; - } - - if (ch1 != ch2) - { - error++; - DBG ("Line Number : %d \tError" " Position :%d \n", line, pos); - } - - ch1 = getc (fp1); - ch2 = getc (fp2); - } - - //printf("Total Errors : %d\t", error); - return error; -} - -void -tcp (char **pArgv) -{ - - int sockfd, newsockfd, portno; - char buff[1024], filename[255]; - - struct sockaddr_in serv_addr, cli_addr; - socklen_t clilen; - - sockfd = socket (AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) - { - error ("error in socket creation"); - } - out ("socket create successful\n"); - - bzero ((char *) &serv_addr, sizeof (serv_addr)); - portno = atoi (pArgv[2]); - - serv_addr.sin_family = AF_INET; - serv_addr.sin_addr.s_addr = inet_addr (pArgv[1]); - serv_addr.sin_port = htons (portno); - - if (bind (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) < 0) - { - error ("bind fail"); - } - out ("Bind successful\n"); - listen (sockfd, 5); - clilen = sizeof (cli_addr); - - newsockfd = accept (sockfd, (struct sockaddr *) &cli_addr, &clilen); - if (newsockfd < 0) - { - error ("error in accept"); - } - out ("socket accept succesful\n"); - bzero (buff, 1024); - - FILE *fp; - int lSize = 0, totallSize = 0; - - bzero (filename, 255); - - fclose (fopen ("receive_file.txt", "w")); - if (system ("chmod +x *") == -1) - { - out (" incorrect use of system\n"); - } - fp = fopen ("receive_file.txt", "a"); - - if (read (newsockfd, &lSize, sizeof (int)) == -1) - { - out ("error executing read\n"); - } - if (read (newsockfd, filename, sizeof (filename)) == -1) - { - out ("error executing read\n"); - } - - while (lSize > totallSize) - { - int bytes_read = 0; - bzero (buff, 1024); - - bytes_read = read (newsockfd, buff, 1024); - - if (bytes_read == 0) - { - break; - } - - if (bytes_read < 0) - { - error ("error in Socket read.\n"); - } - -#if defined(HEX_CONVERT) && defined(DEBUG) - DBG ("=========================================\n"); - hexconvert (buff, bytes_read); - DBG ("=========================================\n"); -#endif -#ifdef DEBUG - DBG ("=========================================\n"); - puts ((const char *) buff); - DBG ("=========================================\n"); -#endif - totallSize += bytes_read; - - if (fwrite (buff, 1, bytes_read, fp) == -1) - { - error ("error in file write\n"); - } -//#if DEBUG - DBG - ("Total size of file = %d, Total Bytes sent to socket = %d, bytes_read in each step = %d\n", - lSize, totallSize, bytes_read); -//#endif - } - out ("file name = %s\n", filename); - out ("Final total size of file = %d, total read from socket = %d\n", lSize, - totallSize); - out ("copy complete\n"); - fclose (fp); - - FILE *fp1 = fopen ("receive_file.txt", "r"); - FILE *fp2 = fopen (filename, "r"); - - fseek (fp2, 0L, SEEK_END); - int lfile_size = ftell (fp2); - rewind (fp2); - if (lfile_size != lSize) - { - out ("Size unmatch...\n"); - } - else - { - out ("Size match...\n"); - } - - if (compareFiles (fp1, fp2) > 0) - { - out ("file unmatch...\n"); - } - else - { - out ("file match...\n"); - } - - close (newsockfd); - close (sockfd); - return; -} - -void -run (int sockfd, struct sockaddr *cliaddr, socklen_t clilen, char *res_buf, - int MAXLINE) -{ - int n, fd; - socklen_t len; - char *buf, *buf2; - FILE *fp1, *fp2; - buf = malloc (MAXLINE + 1); - len = clilen; - n = recvfrom (sockfd, buf, MAXLINE, 0, cliaddr, &len); - buf[n] = 0; - out ("Received from client:[%s] \n", buf); - buf2 = malloc (MAXLINE); - strcpy (buf2, buf); - sendto (sockfd, "ok", strlen ("ok"), 0, cliaddr, len); - fd = open (buf, O_RDWR | O_CREAT, 0666); - while ((n = recvfrom (sockfd, buf, MAXLINE, 0, cliaddr, &len))) - { - buf[n] = 0; - //out("%s", buf); - if (!(strcmp (buf, END_FLAG))) - { - break; - } - if (write (fd, buf, n) == -1) - { - out ("error in executing write\n"); - } - } - fp1 = fopen (buf2, "r"); - fp2 = fopen (res_buf, "r"); - - if (compareFiles (fp1, fp2) == 0) - { - out ("\nPass:The contents of the files are same"); - } - else - { - out ("\nFail:The contents of the files are different"); - } - close (fd); -} - -void -udp (char **pArgv) -{ - int sockfd, portno, MAXLINE; - struct sockaddr_in servaddr, cliaddr; - char *res_buf; - res_buf = pArgv[3]; - - portno = atoi (pArgv[2]); - MAXLINE = atoi (pArgv[4]); - sockfd = socket (AF_INET, SOCK_DGRAM, 0); - if (sockfd < 0) - { - out ("error in socket creation\n"); - } - out ("socket create successful\n"); - - bzero (&servaddr, sizeof (servaddr)); - servaddr.sin_family = AF_INET; - servaddr.sin_addr.s_addr = inet_addr (pArgv[1]); - servaddr.sin_port = htons (portno); - - if (bind (sockfd, (struct sockaddr *) &servaddr, sizeof (servaddr)) < 0) - { - out ("bind fail"); - } - out ("Binded successfully\n"); - fd_set read_fds; - FD_ZERO (&read_fds); - FD_SET (sockfd, &read_fds); - int fdmax = sockfd; - if (FD_ISSET (sockfd, &read_fds)) - { - run (fdmax, (struct sockaddr *) &cliaddr, sizeof (cliaddr), res_buf, - MAXLINE); - } - return; -} - -int -main (int argc, char *argv[]) -{ - int i, j; - char **pArgv; - pArgv = (char **) malloc (sizeof (char *) * 10); - for (i = 0; i < 10; i++) - { - pArgv[i] = (char *) malloc (sizeof (char) * 20); - } - if (strcmp ("tcp", argv[1]) == 0) - { - strcpy (pArgv[0], "tcp"); - /* The arguments of tcp are [server_ip_address] [port number] */ - for (i = 1; i < 3; i++) - { - strcpy (pArgv[i], argv[i + 1]); - } - tcp (pArgv); - } - else if (strcmp ("udp", argv[1]) == 0) - { - strcpy (pArgv[0], "udp"); - /* The arguments of udp are [server_ip_address] [port number] [filename] [MAX_BUFFER_LENGTH] */ - for (i = 1; i < 5; i++) - { - strcpy (pArgv[i], argv[i + 1]); - } - udp (pArgv); - } - - return 0; -} diff --git a/app_example/func-test/fork/CMakeLists.txt b/app_example/func-test/fork/CMakeLists.txt deleted file mode 100644 index f37dae7..0000000 --- a/app_example/func-test/fork/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -######################################################################### -# -# Copyright (c) 2018 Huawei Technologies Co.,Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -######################################################################### -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -g -fPIC -m64 -mssse3 -std=gnu89") - -LINK_DIRECTORIES(${LIB_PATH_SHARED} ${LIB_PATH_STATIC}) - -ADD_EXECUTABLE(vtcp_fork_server tcpserver.c) -ADD_DEPENDENCIES(vtcp_fork_server nStackAPI) -TARGET_LINK_LIBRARIES(vtcp_fork_server libnStackAPI.so -lpthread -lrt) - -ADD_EXECUTABLE(vtcp_client tcpclient.c) -ADD_DEPENDENCIES(vtcp_client nStackAPI) -TARGET_LINK_LIBRARIES(vtcp_client libnStackAPI.so -lpthread -lrt) - -ADD_EXECUTABLE(ktcp_fork_server tcpserver.c) -TARGET_LINK_LIBRARIES(ktcp_fork_server pthread) - -ADD_EXECUTABLE(ktcp_client tcpclient.c) -TARGET_LINK_LIBRARIES(ktcp_client pthread)
\ No newline at end of file diff --git a/app_example/func-test/fork/tcpclient.c b/app_example/func-test/fork/tcpclient.c deleted file mode 100644 index 274dcbb..0000000 --- a/app_example/func-test/fork/tcpclient.c +++ /dev/null @@ -1,173 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/socket.h> -#include <sys/types.h> -#include <netinet/in.h> -#include <arpa/inet.h> - -#define DEBUG - -#ifdef DEBUG -#define DBG(fmt, arg...) do { \ - printf(fmt, ##arg); \ -} while(0) -#else -#define DBG(fmt, arg...) ((void)0) -#endif - -static struct sockaddr_in g_dest; -static struct sockaddr_in g_src; -int srcPort = 0; -int destPort = 0; -int times = 0; - -void -random_str (char *str, const int len) -{ - static const char alphaNum[] = - "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789"; - int i = 0; - - for (i = 0; i < len; i++) - { - str[i] = alphaNum[rand () % (sizeof (alphaNum) - 1)]; - } - - str[len] = 0; -} - -static void -setArgsDefault () -{ - - memset (&g_dest, 0, sizeof (g_dest)); - g_dest.sin_family = AF_INET; - g_dest.sin_addr.s_addr = inet_addr ("127.0.0.1"); - g_dest.sin_port = htons (12345); - bzero (&(g_dest.sin_zero), 8); - - memset (&g_src, 0, sizeof (g_src)); - g_src.sin_family = AF_INET; - g_src.sin_addr.s_addr = inet_addr ("0.0.0.0"); - g_src.sin_port = htons (7895); - bzero (&(g_src.sin_zero), 8); - - times = 1; -} - -static int -process_arg (int argc, char *argv[]) -{ - int opt = 0; - int error = 0; - const char *optstring = "p:d:s:a:t:"; - - if (argc < 5) - { - DBG - ("Param info :-p dest_portid; -d dest_serverIP; -a src_portid; -s src_clientIP; -t times; \n"); - return -1; - } - setArgsDefault (); - while ((opt = getopt (argc, argv, optstring)) != -1) - { - switch (opt) - { - case 'p': - g_dest.sin_port = htons (atoi (optarg)); - break; - case 'd': - g_dest.sin_addr.s_addr = inet_addr (optarg); - break; - case 's': - g_src.sin_addr.s_addr = inet_addr (optarg); - break; - case 'a': - g_src.sin_port = htons (atoi (optarg)); - break; - case 't': - times = atoi (optarg); - break; - } - } - return 0; -} - -int -main (int argc, char *argv[]) -{ - - int clientSocket, ret, i; - char sndbuffer[1024]; - char rcvbuffer[1024]; - int result = 0; - - /* - * check command line arguments - */ - if (0 != process_arg (argc, argv)) - { - DBG ("Error in argument.%d\n", argc); - exit (1); - } - - clientSocket = socket (AF_INET, SOCK_STREAM, 0); - if (clientSocket < 0) - { - DBG ("Error in connection.\n"); - exit (1); - } - DBG ("[INFO]Client Socket is created.\n"); - - ret = bind (clientSocket, (struct sockaddr *) &g_src, sizeof (g_src)); - if (ret < 0) - { - DBG ("Error in binding.\n"); - exit (1); - } - - DBG ("[INFO]Bind to client aaddress port 0\n"); - - ret = connect (clientSocket, (struct sockaddr *) &g_dest, sizeof (g_dest)); - if (ret < 0) - { - DBG ("Error in connection.\n"); - exit (1); - } - DBG ("[INFO]Connected to Server.\n"); - - memset (sndbuffer, '\0', 1024 * sizeof (char)); - memset (rcvbuffer, '\0', 1024 * sizeof (char)); - - for (i = 1; i <= times; i++) - { - DBG ("Client: \t"); - random_str (sndbuffer, 50); - send (clientSocket, sndbuffer, strlen (sndbuffer), 0); - - if (recv (clientSocket, rcvbuffer, 1024, 0) < 0) - { - DBG ("Error in receiving data.\n"); - } - else - { - DBG ("Server: \t%s\n", rcvbuffer); - } - if (0 != strcmp (sndbuffer, rcvbuffer)) - { - result = -1; - break; - } - } - - /* Send exit message to server */ - strcpy (sndbuffer, "#exit"); - send (clientSocket, sndbuffer, strlen (sndbuffer), 0); - - DBG ("Result = %s\n", (result == 0) ? "Success" : "Fail"); - close (clientSocket); - DBG ("Disconnecting from server.\n"); - return 0; -} diff --git a/app_example/func-test/fork/tcpserver.c b/app_example/func-test/fork/tcpserver.c deleted file mode 100644 index 5474c35..0000000 --- a/app_example/func-test/fork/tcpserver.c +++ /dev/null @@ -1,161 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <sys/socket.h> -#include <sys/types.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <sys/wait.h> - -static struct sockaddr_in g_src; -int srcPort = 0; -int destPort = 0; -int times = 0; - -#ifdef DEBUG -#define DBG(fmt, arg...) do { \ - DBG(fmt, ##arg); \ -} while(0) -#else -#define DBG(fmt, arg...) ((void)0) -#endif - -static void -setArgsDefault () -{ - memset (&g_src, 0, sizeof (g_src)); - g_src.sin_family = AF_INET; - g_src.sin_addr.s_addr = inet_addr ("0.0.0.0"); - g_src.sin_port = htons (7895); - bzero (&(g_src.sin_zero), 8); - - times = 1; -} - -static int -process_arg (int argc, char *argv[]) -{ - int opt = 0; - int error = 0; - const char *optstring = "s:a:t:"; - - if (argc < 5) - { - DBG - ("Param info :-p dest_portid; -d dest_serverIP; -a src_portid; -s src_clientIP; -t times; \n"); - return -1; - } - setArgsDefault (); - while ((opt = getopt (argc, argv, optstring)) != -1) - { - switch (opt) - { - case 's': - g_src.sin_addr.s_addr = inet_addr (optarg); - break; - case 'a': - g_src.sin_port = htons (atoi (optarg)); - break; - case 't': - times = atoi (optarg); - break; - } - } - return 0; -} - -int -main (int argc, char *argv[]) -{ - - int sockfd, ret; - int newSocket; - socklen_t addr_size; - static struct sockaddr_in accept_addr; - char buffer[1024]; - pid_t childpid; - - /* - * check command line arguments - */ - if (0 != process_arg (argc, argv)) - { - DBG ("Error in argument.%d\n", argc); - exit (1); - } - - sockfd = socket (AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) - { - DBG ("Error in connection.\n"); - exit (1); - } - DBG ("Server Socket is created. %d\n", sockfd); - - ret = bind (sockfd, (struct sockaddr *) &g_src, sizeof (g_src)); - if (ret < 0) - { - DBG ("Error in binding.\n"); - exit (1); - } - - DBG ("Bind sucess port %d\n", g_src.sin_port); - - if (listen (sockfd, 10) == 0) - { - DBG ("Listening on %s....\n", inet_ntoa (g_src.sin_addr)); - } - else - { - DBG ("Error in binding.\n"); - } - - while (1) - { - newSocket = - accept (sockfd, (struct sockaddr *) &accept_addr, &addr_size); - if (newSocket < 0) - { - DBG ("Error: Exiting here pid %d", getpid ()); - exit (1); - } - - DBG ("Connection accepted from %s:%d fd %d\n", - inet_ntoa (accept_addr.sin_addr), - ntohs (accept_addr.sin_port), newSocket); - if ((childpid = fork ()) == 0) - { - DBG ("[ PID %d] Child process Created. Pid %d \r\n", getpid (), - getpid ()); - DBG ("[ PID %d] Closing fd %d\n", getpid (), sockfd); - close (sockfd); - - while (1) - { - memset (buffer, '\0', 1024 * sizeof (char)); - recv (newSocket, buffer, 1024, 0); - if (strcmp (buffer, "#exit") == 0) - { - DBG ("Disconnected from %s:%d\n", - inet_ntoa (newAddr.sin_addr), - ntohs (newAddr.sin_port)); - break; - } - else - { - DBG ("[PID %d]Client: %s\n", getpid (), buffer); - send (newSocket, buffer, strlen (buffer), 0); - bzero (buffer, sizeof (buffer)); - } - } - - DBG ("[PID %d]Closing socket %d\r\n", getpid (), newSocket); - close (newSocket); - } - - } - - DBG ("[PID %d]Process exiting... %d\r\n", getpid (), getpid ()); - return 0; -} diff --git a/app_example/perf-test/CMakeLists.txt b/app_example/perf-test/CMakeLists.txt deleted file mode 100644 index 7f05b84..0000000 --- a/app_example/perf-test/CMakeLists.txt +++ /dev/null @@ -1,47 +0,0 @@ -######################################################################### -# -# Copyright (c) 2018 Huawei Technologies Co.,Ltd. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -######################################################################### -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -g -fPIC -m64 -mssse3 -std=gnu89") - -LINK_DIRECTORIES(${LIB_PATH_SHARED} ${LIB_PATH_STATIC}) - -ADD_EXECUTABLE(vc_common multi_tcp_common_app_Cli.c) -ADD_DEPENDENCIES(vc_common nStackAPI) -TARGET_LINK_LIBRARIES(vc_common libnStackAPI.so -lpthread -lrt) - -ADD_EXECUTABLE(vs_epoll multi_tcp_epoll_app_Ser.c) -ADD_DEPENDENCIES(vs_epoll nStackAPI) -TARGET_LINK_LIBRARIES(vs_epoll libnStackAPI.so -lpthread -lrt) - -ADD_EXECUTABLE(vs_select multi_tcp_select_app_Ser.c) -ADD_DEPENDENCIES(vs_select nStackAPI) -TARGET_LINK_LIBRARIES(vs_select libnStackAPI.so -lpthread -lrt) - -ADD_EXECUTABLE(kc_common multi_tcp_common_app_Cli.c) -TARGET_LINK_LIBRARIES(kc_common pthread) - -ADD_EXECUTABLE(ks_epoll multi_tcp_epoll_app_Ser.c) -TARGET_LINK_LIBRARIES(ks_epoll pthread) - -ADD_EXECUTABLE(ks_select multi_tcp_select_app_Ser.c) -TARGET_LINK_LIBRARIES(ks_select pthread) - -ADD_EXECUTABLE(vs_common multi_tcp_common_Ser.c) -ADD_DEPENDENCIES(vs_common nStackAPI) -TARGET_LINK_LIBRARIES(vs_common libnStackAPI.so -lpthread -lrt) - -ADD_EXECUTABLE(ks_common multi_tcp_common_Ser.c) -TARGET_LINK_LIBRARIES(ks_common pthread) - diff --git a/app_example/perf-test/multi_tcp_common_Ser.c b/app_example/perf-test/multi_tcp_common_Ser.c deleted file mode 100644 index 984052b..0000000 --- a/app_example/perf-test/multi_tcp_common_Ser.c +++ /dev/null @@ -1,544 +0,0 @@ -/* -* -* Copyright (c) 2018 Huawei Technologies Co.,Ltd. -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at: -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#include <fcntl.h> -#include <memory.h> -#include <signal.h> -#include <stdio.h> -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> -#include <sys/stat.h> -#include <netinet/in.h> -#include <time.h> -#include <linux/tcp.h> -#define __USE_GNU -#include <sched.h> -#include <pthread.h> -#include <arpa/inet.h> -#include <sys/epoll.h> -#include <errno.h> - -#define _BIND bind -#define _LISTEN listen -#define _SOCKET socket -#define _ACCEPT accept -#define _SEND send -#define _RECV recv -#define _CLOSE close -#define _CONNECT connect -#define _PROTOCOL IPPROTO_TCP - -#define MAX_TEST_TIME 1000 -#define MSG_LENGTH 256 -#define CORE_NUM 8 -#define START_CPU_ID 2 -#define MAX_CONN_LIMIT 256 -#define MAX_PORT_NUM 65535 -//1:A-B ;0:A-B-A -#define SEND_RECV_MODE 1 -#define MAX_EVENTS 1000 -#define Default_PortID 12345 -#define Default_SleepCnt 10000 -#define Default_SleepTime 1000000 -#define Flag_Print 1 -#define Fd_Number 1 - -static struct sockaddr_in g_dest; -static struct sockaddr_in g_src; -static struct sockaddr_in g_recv; - -int times = MAX_TEST_TIME; -int msg_length = MSG_LENGTH; -int coreNum = CORE_NUM; -int startCPUId = START_CPU_ID; -int connectNum = MAX_CONN_LIMIT; -int msgMode = SEND_RECV_MODE; -int sleepCnt = Default_SleepCnt; -int sleepTime = Default_SleepTime; //us -int fdNumber = Fd_Number; -int flagPrint = Flag_Print; -int unitPrint = 0; -int waitTime = 0; - -int srcPort = Default_PortID; -int destPort = 0; -int recvPort = 0; -char sendarr[256] = ""; -char recvarr[256] = ""; -char destarr[256] = ""; - -static void -setArgsDefault () -{ - - memset (&g_dest, 0, sizeof (g_dest)); - g_dest.sin_family = AF_INET; - g_dest.sin_addr.s_addr = inet_addr ("127.0.0.1"); - g_dest.sin_port = htons (12345); - bzero (&(g_dest.sin_zero), 8); - - memset (&g_src, 0, sizeof (g_src)); - g_src.sin_family = AF_INET; - g_src.sin_addr.s_addr = inet_addr ("0.0.0.0"); - g_src.sin_port = htons (7895); - bzero (&(g_src.sin_zero), 8); - - memset (&g_recv, 0, sizeof (g_recv)); - g_recv.sin_family = AF_INET; - g_recv.sin_addr.s_addr = inet_addr ("0.0.0.0"); - g_recv.sin_port = htons (7895); - bzero (&(g_recv.sin_zero), 8); - -} - -static int -process_arg (int argc, char *argv[]) -{ - int opt = 0; - int error = 0; - const char *optstring = "p:d:s:a:l:t:e:i:f:r:n:w:u:x:"; - int rw_mark = 0; - - if (argc < 4) - { - printf - ("Param info :-p dest_portid; -d dest_serverIP; -a src_portid; -s src_clientIP; -l msg_length; \n"); - printf - ("\t-t MAX_TEST_TIME; -i msg_interval ; -f client fd number ; -r receive port; -n connectNum(one server vs n client)\n"); - return 0; - } - while ((opt = getopt (argc, argv, optstring)) != -1) - { - switch (opt) - { - case 'p': - destPort = atoi (optarg); - g_dest.sin_port = htons (atoi (optarg)); - break; - case 'd': - stpcpy (destarr, optarg); - g_dest.sin_addr.s_addr = inet_addr (optarg); - break; - case 's': - stpcpy (sendarr, optarg); - g_src.sin_addr.s_addr = inet_addr (optarg); - g_recv.sin_addr.s_addr = inet_addr (optarg); - break; - case 'a': - //g_src.sin_port = htons(atoi(optarg)); - srcPort = atoi (optarg); - break; - case 'l': - msg_length = atoi (optarg); - break; - case 't': - times = atoi (optarg); - break; - case 'e': - sleepCnt = atoi (optarg); - break; - case 'i': - sleepTime = atoi (optarg); - break; - case 'f': - fdNumber = atoi (optarg); - break; - case 'r': - recvPort = atoi (optarg); - g_recv.sin_port = htons (atoi (optarg)); - break; - case 'n': - connectNum = atoi (optarg); - break; - case 'w': - waitTime = atoi (optarg); - break; - case 'u': - unitPrint = atoi (optarg); - break; - case 'x': - flagPrint = atoi (optarg); - break; - - } - } - return 1; -} - -void -process_client (void) -{ - int sendLen = 0; - int i = 0, t = 0, p = 0, optval = 0, ret = 0; - char send_buf[1000] = ""; - int c_socketfd[100] = { 0 }; - int errbind[1000] = { 0 }; - int errconn[1000] = { 0 }; - - int send_count[1000] = { 0 }; - int pps = 0; - long pps_time = 0; - - struct timespec startTime, endTime; - struct timespec countStart; - struct timespec countEnd; - - memset (&countStart, 0, sizeof (countStart)); - memset (&countEnd, 0, sizeof (countEnd)); - - for (i = 0; i < fdNumber; i++) - { - c_socketfd[i] = _SOCKET (PF_INET, SOCK_STREAM, _PROTOCOL); - if (0 > c_socketfd[i]) - { - printf ("client %d failed,err %d\n", i, errno); - } - else - { - printf ("client %d created success\n", i); - } - } - - for (i = 0; i < fdNumber; i++) - { - optval = 1; - ret = - setsockopt (c_socketfd[i], SOL_SOCKET, SO_REUSEADDR, (void *) &optval, - sizeof (optval)); - if (ret == -1) - { - printf ("Couldn't setsockopt(SO_REUSEADDR)\n"); - break; - } - } - - for (i = 0; i < fdNumber; i++) - { - g_src.sin_port = htons (srcPort + i); - errbind[i] = - _BIND (c_socketfd[i], (struct sockaddr *) &g_src, sizeof (g_src)); - if (errbind[i] < 0) - { - printf ("client %d bind Failed %d\n", i, errno); - _CLOSE (c_socketfd[i]); - c_socketfd[i] = -1; - continue; - } - else - { - printf ("client %d bind Success port:%d IP:%s\n", i, - ntohs (g_src.sin_port), - inet_ntoa (*((struct in_addr *) &(g_src.sin_addr.s_addr)))); - } - } - for (i = 0; i < fdNumber; i++) - { - if (errbind[i] >= 0) - { - errconn[i] = - _CONNECT (c_socketfd[i], (struct sockaddr *) &g_dest, - sizeof (g_dest)); - if (errconn[i] < 0) - { - printf ("client %d Connect Failed %d\n", i, errno); - _CLOSE (c_socketfd[i]); - c_socketfd[i] = -1; - continue; - } - else - { - printf ("client %d Connect Success port:%d, IP:%s\n", i, - ntohs (g_dest.sin_port), - inet_ntoa (* - ((struct in_addr *) - &(g_dest.sin_addr.s_addr)))); - } - } - } - - sleep (1); - - clock_gettime (CLOCK_MONOTONIC, &startTime); - clock_gettime (CLOCK_MONOTONIC, &countStart); - - for (t = 0; t < times; t++) - { - for (i = 0; i < fdNumber; i++) - { - if (c_socketfd[i] < 0) - { - continue; - } - do - { - sendLen = _SEND (c_socketfd[i], send_buf, msg_length, 0); - } - while (sendLen <= 0); - send_count[i]++; - } - - if (0 != sleepTime) - { - if ((t % sleepCnt) == 0) - { - usleep (sleepTime); - } - } - - if ((send_count[0] % unitPrint) == 0) - { - clock_gettime (CLOCK_MONOTONIC, &countEnd); - - pps_time = - (countEnd.tv_sec - countStart.tv_sec) * 1000000000 + - countEnd.tv_nsec - countStart.tv_nsec; - pps = ((float) 1000000000 / pps_time) * unitPrint * fdNumber; - if ((flagPrint != 0)) - { - printf (" sendcount %d, time: %ld ns\n", - send_count[0] * fdNumber, pps_time); - } - printf ("sendcount %d , pps=%d\n", send_count[0] * fdNumber, pps); - clock_gettime (CLOCK_MONOTONIC, &countStart); - } - } - - clock_gettime (CLOCK_MONOTONIC, &endTime); - - for (i = 0; i < fdNumber; i++) - { - printf ("client %d send %d , sendtime :%ld s %ld ns\n", i, - send_count[i], endTime.tv_sec - startTime.tv_sec, - endTime.tv_nsec - startTime.tv_nsec); - } - - for (i = 0; i < fdNumber; i++) - { - printf ("client %d close!\n", i); - if (c_socketfd[i] > 0) - _CLOSE (c_socketfd[i]); - } - - pthread_exit (NULL); -} - -/* - using this thread to do recv msg; -*/ -void * -process_server_msg_thread (void *pArgv) -{ - int recvLen = 0, recvLen2 = 0; - char send_buf[1000]; - char recv_buf[1000]; - int recv_count = 0; - long recv_ppstime = 0; - int recv_pps = 0; - int ret; - struct timespec recvStart; - struct timespec recvEnd; - memset (&recvStart, 0, sizeof (recvStart)); - memset (&recvEnd, 0, sizeof (recvEnd)); - - pthread_detach (pthread_self ()); - - int msgFd = *(int *) pArgv; - clock_gettime (CLOCK_MONOTONIC, &recvStart); - while (recv_count < times) - { - recvLen = 0; - recvLen2 = 0; - while (1) - { - recvLen2 = - recv (msgFd, recv_buf + recvLen, msg_length - recvLen, 0); - if (recvLen2 <= 0) - { - break; - } - else if (recvLen2 == msg_length - recvLen) - { - recvLen = 0; - recv_count++; - if (msg_length != send (msgFd, send_buf, msg_length, 0)) - { - printf ("send failed!====, need exit\n"); - } - - } - else if (recvLen2 < msg_length - recvLen) - { - recvLen += recvLen2; - } - if ((flagPrint != 0) && ((recv_count % unitPrint) == 0)) - { - clock_gettime (CLOCK_MONOTONIC, &recvEnd); - recv_ppstime = - (recvEnd.tv_sec - recvStart.tv_sec) * 1000000000 + - recvEnd.tv_nsec - recvStart.tv_nsec; - recv_pps = ((float) 1000000000 / recv_ppstime) * unitPrint; - printf ("receive count:%d, receive time: %ld ns\n", recv_count, - recv_ppstime); - printf ("receive pps = %d\n", recv_pps); - clock_gettime (CLOCK_MONOTONIC, &recvStart); - } - } - } - close (msgFd); -} - -/* - using this thread to do accept connect -*/ -void * -process_server_accept_thread (void *pArgv) -{ - int listenFd = 0; - int x, optval, ret, m = 0; - int acpt_socketfd[1000] = { 0 }; - - listenFd = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP); - if (0 > listenFd) - { - printf ("ERROR:socket failed,errno [%d]\n", errno); - return; - } - else - { - printf ("INFO:Create listen socket Success, listenFd[%d]\n", listenFd); - } - - if (0 > fcntl (listenFd, F_SETFL, O_NONBLOCK)) - { - printf ("ERROR:fcntl failed. fd[%d], errno[%d]/n", listenFd, errno); - close (listenFd); - } - - optval = 1; - ret = - setsockopt (listenFd, SOL_SOCKET, SO_REUSEADDR, (void *) &optval, - sizeof (optval)); - if (ret == -1) - { - printf ("ERROR:setsockopt failed. fd[%d], errno[%d]\n", listenFd, - errno); - close (listenFd); - return; - } - - if (0 != - bind (listenFd, (struct sockaddr *) &g_recv, sizeof (struct sockaddr))) - { - printf ("ERROR:bind failed. fd[%d] errno [%d]\n", listenFd, errno); - printf ("INFO:Bind Failed, port %d IP:%s\n", ntohs (g_recv.sin_port), - inet_ntoa (*((struct in_addr *) &(g_recv.sin_addr.s_addr)))); - close (listenFd); - exit (-1); - } - else - { - printf ("Info Bind Success, port %d IP:%s\n", ntohs (g_recv.sin_port), - inet_ntoa (*((struct in_addr *) &(g_recv.sin_addr.s_addr)))); - } - - if (0 != listen (listenFd, 100)) - { - printf ("server socket listen failed. err %d\n", errno); - close (listenFd); - return; - } - printf ("Listen Success\n"); - - int timeout = -1; - int accpedNum = 0; - while (accpedNum < connectNum) - { - while (1) - { - acpt_socketfd[accpedNum] = - accept4 (listenFd, NULL, NULL, SOCK_NONBLOCK); - if (acpt_socketfd[accpedNum] < 0) - { - break; - } - - fcntl (acpt_socketfd[accpedNum], F_SETFL, 0); - - /*add new accptFd to MsgEpFD */ - pthread_t ser_rcv_thread_id; - if (pthread_create - (&ser_rcv_thread_id, NULL, process_server_msg_thread, - (void *) &acpt_socketfd[accpedNum]) == -1) - { - printf ("create process_server_msg_thread fail\n"); - break; - } - - printf ("accept cnt [%d], cur accept fd [%d]\n", accpedNum, - acpt_socketfd[accpedNum]); - accpedNum++; - } - } - close (listenFd); - while (1) - { - sleep (10); - } - - pthread_exit (NULL); -} - -void -main (int argc, char *argv[]) -{ - socklen_t addrlen = sizeof (struct sockaddr); - int err = 0, result = 0, ret = 0; - int i = 0, j = 0, optval = 0, z = 0, x, listenfd; - cpu_set_t mask; - - setArgsDefault (); - ret = process_arg (argc, argv); - if (ret != 1) - { - printf ("The param error\n"); - return; - } - - pthread_t server_thread_id; - - if (pthread_create - (&server_thread_id, NULL, process_server_accept_thread, NULL) == -1) - { - printf ("create process_server_accept_thread fail\n"); - return; - } - - printf ("create process_server_accept_thread success\n"); - - if (server_thread_id != 0) - { - printf ("Server Thread join\n"); - pthread_join (server_thread_id, NULL); - } - - while (1) - { - sleep (10); - } - - return; -} diff --git a/app_example/perf-test/multi_tcp_common_app_Cli.c b/app_example/perf-test/multi_tcp_common_app_Cli.c deleted file mode 100644 index e395848..0000000 --- a/app_example/perf-test/multi_tcp_common_app_Cli.c +++ /dev/null @@ -1,396 +0,0 @@ -/* -* -* Copyright (c) 2018 Huawei Technologies Co.,Ltd. -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at: -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#define _GNU_SOURCE -#include <sys/socket.h> -#include <fcntl.h> -#include <memory.h> -#include <signal.h> -#include <stdio.h> -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> -#include <sys/stat.h> -#include <netinet/in.h> -#include <time.h> -#include <linux/tcp.h> -#include <sched.h> -#include <pthread.h> -#include <arpa/inet.h> -#include <sys/epoll.h> -#include <errno.h> - -#define _BIND bind -#define _LISTEN listen -#define _SOCKET socket -#define _ACCEPT accept -#define _SEND send -#define _RECV recv -#define _CLOSE close -#define _CONNECT connect -#define _PROTOCOL IPPROTO_TCP - -#define MAX_TEST_TIME 1000 -#define MSG_LENGTH 256 -#define CORE_NUM 8 -#define START_CPU_ID 2 -#define MAX_CONN_LIMIT 256 -#define MAX_PORT_NUM 65535 -//1:A-B ;0:A-B-A -#define SEND_RECV_MODE 1 -#define MAX_EVENTS 1000 -#define Default_PortID 12345 -#define Default_SleepCnt 10000 -#define Default_SleepTime 1000000 -#define Flag_Print 1 -#define Fd_Number 1 - -static struct sockaddr_in g_dest; -static struct sockaddr_in g_src; -static struct sockaddr_in g_recv; - -int times = MAX_TEST_TIME; -int msg_length = MSG_LENGTH; -int coreNum = CORE_NUM; -int startCPUId = START_CPU_ID; -int connectNum = MAX_CONN_LIMIT; -int msgMode = SEND_RECV_MODE; -int sleepCnt = Default_SleepCnt; -int sleepTime = Default_SleepTime; //us -int fdNumber = Fd_Number; -int flagPrint = Flag_Print; -int unitPrint = 0; -int waitTime = 0; - -int srcPort = Default_PortID; -int destPort = 0; -int recvPort = 0; -char sendarr[256] = ""; -char recvarr[256] = ""; -char destarr[256] = ""; - -static void -setArgsDefault () -{ - - memset (&g_dest, 0, sizeof (g_dest)); - g_dest.sin_family = AF_INET; - g_dest.sin_addr.s_addr = inet_addr ("127.0.0.1"); - g_dest.sin_port = htons (12345); - bzero (&(g_dest.sin_zero), 8); - - memset (&g_src, 0, sizeof (g_src)); - g_src.sin_family = AF_INET; - g_src.sin_addr.s_addr = inet_addr ("0.0.0.0"); - g_src.sin_port = htons (7895); - bzero (&(g_src.sin_zero), 8); - - memset (&g_recv, 0, sizeof (g_recv)); - g_recv.sin_family = AF_INET; - g_recv.sin_addr.s_addr = inet_addr ("0.0.0.0"); - g_recv.sin_port = htons (7895); - bzero (&(g_recv.sin_zero), 8); - -} - -static int -process_arg (int argc, char *argv[]) -{ - int opt = 0; - int error = 0; - const char *optstring = "p:d:s:a:l:t:e:i:f:r:n:w:u:x:"; - int rw_mark = 0; - - if (argc < 4) - { - printf - ("Param info :-p dest_portid; -d dest_serverIP; -a src_portid; -s src_clientIP; -l msg_length; \n"); - printf - ("\t-t MAX_TEST_TIME; -i msg_interval ; -f client fd number ; -r receive port; -n connectNum(one server vs n client)\n"); - return 0; - } - while ((opt = getopt (argc, argv, optstring)) != -1) - { - switch (opt) - { - case 'p': - destPort = atoi (optarg); - g_dest.sin_port = htons (atoi (optarg)); - break; - case 'd': - stpcpy (destarr, optarg); - g_dest.sin_addr.s_addr = inet_addr (optarg); - break; - case 's': - stpcpy (sendarr, optarg); - g_src.sin_addr.s_addr = inet_addr (optarg); - g_recv.sin_addr.s_addr = inet_addr (optarg); - break; - case 'a': - //g_src.sin_port = htons(atoi(optarg)); - srcPort = atoi (optarg); - break; - case 'l': - msg_length = atoi (optarg); - break; - case 't': - times = atoi (optarg); - break; - case 'e': - sleepCnt = atoi (optarg); - break; - case 'i': - sleepTime = atoi (optarg); - break; - case 'f': - fdNumber = atoi (optarg); - break; - case 'r': - recvPort = atoi (optarg); - g_recv.sin_port = htons (atoi (optarg)); - break; - case 'n': - connectNum = atoi (optarg); - break; - case 'w': - waitTime = atoi (optarg); - break; - case 'u': - unitPrint = atoi (optarg); - break; - case 'x': - flagPrint = atoi (optarg); - break; - - } - } - return 1; -} - -void -process_client (void) -{ - int sendLen = 0; - int i = 0, t = 0, p = 0, optval = 0, ret = 0; - char send_buf[1000] = ""; - char recv_buf[1000] = ""; - int c_socketfd[100] = { 0 }; - int errbind[1000] = { 0 }; - int errconn[1000] = { 0 }; - - int send_count[1000] = { 0 }; - int pps = 0; - long pps_time = 0; - - struct timespec startTime, endTime; - struct timespec countStart; - struct timespec countEnd; - memset (&countStart, 0, sizeof (countStart)); - memset (&countEnd, 0, sizeof (countEnd)); - - for (i = 0; i < fdNumber; i++) - { - c_socketfd[i] = _SOCKET (PF_INET, SOCK_STREAM, _PROTOCOL); - if (0 > c_socketfd[i]) - { - printf ("client %d failed,err %d\n", i, errno); - } - else - { - printf ("client %d created success\n", i); - } - } - - for (i = 0; i < fdNumber; i++) - { - optval = 1; - ret = - setsockopt (c_socketfd[i], SOL_SOCKET, SO_REUSEADDR, (void *) &optval, - sizeof (optval)); - if (ret == -1) - { - printf ("Couldn't setsockopt(SO_REUSEADDR)\n"); - break; - } - } - - for (i = 0; i < fdNumber; i++) - { - g_src.sin_port = htons (srcPort + i); - errbind[i] = - _BIND (c_socketfd[i], (struct sockaddr *) &g_src, sizeof (g_src)); - if (errbind[i] < 0) - { - printf ("client %d bind Failed %d\n", i, errno); - _CLOSE (c_socketfd[i]); - c_socketfd[i] = -1; - continue; - } - else - { - printf ("client %d bind Success port:%d IP:%s\n", i, - ntohs (g_src.sin_port), - inet_ntoa (*((struct in_addr *) &(g_src.sin_addr.s_addr)))); - } - } - for (i = 0; i < fdNumber; i++) - { - if (errbind[i] >= 0) - { - errconn[i] = - _CONNECT (c_socketfd[i], (struct sockaddr *) &g_dest, - sizeof (g_dest)); - if (errconn[i] < 0) - { - printf ("client %d Connect Failed %s\n", i, strerror(errno)); - _CLOSE (c_socketfd[i]); - c_socketfd[i] = -1; - continue; - } - else - { - printf ("client %d Connect Success port:%d, IP:%s\n", i, - ntohs (g_dest.sin_port), - inet_ntoa (* - ((struct in_addr *) - &(g_dest.sin_addr.s_addr)))); - } - } - } - - sleep (1); - - clock_gettime (CLOCK_MONOTONIC, &startTime); - clock_gettime (CLOCK_MONOTONIC, &countStart); - - int recvLen2, recvLen; - for (t = 0; t < times; t++) - { - for (i = 0; i < fdNumber; i++) - { - if (c_socketfd[i] < 0) - { - continue; - } - do - { - sendLen = _SEND (c_socketfd[i], send_buf, msg_length, 0); - } - while (sendLen <= 0); - send_count[i]++; - recvLen = 0; - do - { - recvLen2 = - recv (c_socketfd[i], recv_buf + recvLen, msg_length - recvLen, - 0); - if (recvLen2 <= 0) - { - continue; - } - else if (recvLen2 == msg_length - recvLen) - { - recvLen = 0; - break; - } - else if (recvLen2 < msg_length - recvLen) - { - recvLen += recvLen2; - } - } - while (1); - } - - if (0 != sleepTime) - { - if ((t % sleepCnt) == 0) - { - usleep (sleepTime); - } - } - - if ((send_count[0] % unitPrint) == 0 && send_count[0] > 0) - { - clock_gettime (CLOCK_MONOTONIC, &countEnd); - - pps_time = - (countEnd.tv_sec - countStart.tv_sec) * 1000000000 + - countEnd.tv_nsec - countStart.tv_nsec; - pps = ((float) 1000000000 / pps_time) * unitPrint * fdNumber; - if ((flagPrint != 0)) - { - printf (" sendcount %d, time: %ld ns\n", - send_count[0] * fdNumber, pps_time); - } - printf ("sendcount %d , pps=%d\n", send_count[0] * fdNumber, pps); - clock_gettime (CLOCK_MONOTONIC, &countStart); - } - } - - clock_gettime (CLOCK_MONOTONIC, &endTime); - - for (i = 0; i < fdNumber; i++) - { - printf ("client %d send %d , sendtime :%ld s %ld ns\n", i, - send_count[i], endTime.tv_sec - startTime.tv_sec, - endTime.tv_nsec - startTime.tv_nsec); - } - - for (i = 0; i < fdNumber; i++) - { - printf ("client %d close!\n", i); - if (c_socketfd[i] > 0) - _CLOSE (c_socketfd[i]); - } - - pthread_exit (NULL); -} - -void -main (int argc, char *argv[]) -{ - socklen_t addrlen = sizeof (struct sockaddr); - int err = 0, result = 0, ret = 0; - int i = 0, j = 0, optval = 0, z = 0, x, listenfd; - cpu_set_t mask; - - setArgsDefault (); - ret = process_arg (argc, argv); - if (ret != 1) - { - printf ("The param error\n"); - return; - } - - pthread_t client_thread_id; - - if (pthread_create - (&client_thread_id, NULL, (void *) (&process_client), NULL) == -1) - { - printf ("create client thread fail\n"); - return; - } - - printf ("create client thread success\n"); - - if (client_thread_id != 0) - { - printf ("Client Thread join\n"); - pthread_join (client_thread_id, NULL); - } - - return; -} diff --git a/app_example/perf-test/multi_tcp_epoll_app_Ser.c b/app_example/perf-test/multi_tcp_epoll_app_Ser.c deleted file mode 100644 index 270fbde..0000000 --- a/app_example/perf-test/multi_tcp_epoll_app_Ser.c +++ /dev/null @@ -1,632 +0,0 @@ -/* -* -* Copyright (c) 2018 Huawei Technologies Co.,Ltd. -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at: -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#define _GNU_SOURCE -#include <sys/socket.h> -#include <fcntl.h> -#include <memory.h> -#include <signal.h> -#include <stdio.h> -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> -#include <sys/stat.h> -#include <netinet/in.h> -#include <time.h> -#include <linux/tcp.h> -#include <sched.h> -#include <pthread.h> -#include <arpa/inet.h> -#include <sys/epoll.h> -#include <errno.h> - -#define _BIND bind -#define _LISTEN listen -#define _SOCKET socket -#define _ACCEPT accept -#define _SEND send -#define _RECV recv -#define _CLOSE close -#define _CONNECT connect -#define _PROTOCOL IPPROTO_TCP - -#define MAX_TEST_TIME 1000 -#define MSG_LENGTH 256 -#define CORE_NUM 8 -#define START_CPU_ID 2 -#define MAX_CONN_LIMIT 256 -#define MAX_PORT_NUM 65535 -//1:A-B ;0:A-B-A -#define SEND_RECV_MODE 1 -#define MAX_EVENTS 1000 -#define Default_PortID 12345 -#define Default_SleepCnt 10000 -#define Default_SleepTime 1000000 -#define Flag_Print 1 -#define Fd_Number 1 - -static struct sockaddr_in g_dest; -static struct sockaddr_in g_src; -static struct sockaddr_in g_recv; - -int times = MAX_TEST_TIME; -int msg_length = MSG_LENGTH; -int coreNum = CORE_NUM; -int startCPUId = START_CPU_ID; -int connectNum = MAX_CONN_LIMIT; -int msgMode = SEND_RECV_MODE; -int sleepCnt = Default_SleepCnt; -int sleepTime = Default_SleepTime; //us -int fdNumber = Fd_Number; -int flagPrint = Flag_Print; -int unitPrint = 0; -int waitTime = 0; - -int srcPort = Default_PortID; -int destPort = 0; -int recvPort = 0; -char sendarr[256] = ""; -char recvarr[256] = ""; -char destarr[256] = ""; - -static void -setArgsDefault () -{ - - memset (&g_dest, 0, sizeof (g_dest)); - g_dest.sin_family = AF_INET; - g_dest.sin_addr.s_addr = inet_addr ("127.0.0.1"); - g_dest.sin_port = htons (12345); - bzero (&(g_dest.sin_zero), 8); - - memset (&g_src, 0, sizeof (g_src)); - g_src.sin_family = AF_INET; - g_src.sin_addr.s_addr = inet_addr ("0.0.0.0"); - g_src.sin_port = htons (7895); - bzero (&(g_src.sin_zero), 8); - - memset (&g_recv, 0, sizeof (g_recv)); - g_recv.sin_family = AF_INET; - g_recv.sin_addr.s_addr = inet_addr ("0.0.0.0"); - g_recv.sin_port = htons (7895); - bzero (&(g_recv.sin_zero), 8); - -} - -static int -process_arg (int argc, char *argv[]) -{ - int opt = 0; - int error = 0; - const char *optstring = "p:d:s:a:l:t:e:i:f:r:n:w:u:x:"; - int rw_mark = 0; - - if (argc < 4) - { - printf - ("Param info :-p dest_portid; -d dest_serverIP; -a src_portid; -s src_clientIP; -l msg_length; \n"); - printf - ("\t-t MAX_TEST_TIME; -i msg_interval ; -f client fd number ; -r receive port; -n connectNum(one server vs n client)\n"); - return 0; - } - while ((opt = getopt (argc, argv, optstring)) != -1) - { - switch (opt) - { - case 'p': - destPort = atoi (optarg); - g_dest.sin_port = htons (atoi (optarg)); - break; - case 'd': - stpcpy (destarr, optarg); - g_dest.sin_addr.s_addr = inet_addr (optarg); - break; - case 's': - stpcpy (sendarr, optarg); - g_src.sin_addr.s_addr = inet_addr (optarg); - g_recv.sin_addr.s_addr = inet_addr (optarg); - break; - case 'a': - //g_src.sin_port = htons(atoi(optarg)); - srcPort = atoi (optarg); - break; - case 'l': - msg_length = atoi (optarg); - break; - case 't': - times = atoi (optarg); - break; - case 'e': - sleepCnt = atoi (optarg); - break; - case 'i': - sleepTime = atoi (optarg); - break; - case 'f': - fdNumber = atoi (optarg); - break; - case 'r': - recvPort = atoi (optarg); - g_recv.sin_port = htons (atoi (optarg)); - break; - case 'n': - connectNum = atoi (optarg); - break; - case 'w': - waitTime = atoi (optarg); - break; - case 'u': - unitPrint = atoi (optarg); - break; - case 'x': - flagPrint = atoi (optarg); - break; - - } - } - return 1; -} - -void -process_client (void) -{ - int sendLen = 0; - int i = 0, t = 0, p = 0, optval = 0, ret = 0; - char send_buf[1000] = ""; - int c_socketfd[100] = { 0 }; - int errbind[1000] = { 0 }; - int errconn[1000] = { 0 }; - - int send_count[1000] = { 0 }; - int pps = 0; - long pps_time = 0; - - struct timespec startTime, endTime; - struct timespec countStart; - struct timespec countEnd; - memset (&countStart, 0, sizeof (countStart)); - memset (&countEnd, 0, sizeof (countEnd)); - - for (i = 0; i < fdNumber; i++) - { - c_socketfd[i] = _SOCKET (PF_INET, SOCK_STREAM, _PROTOCOL); - if (0 > c_socketfd[i]) - { - printf ("client %d failed,err %d\n", i, errno); - } - else - { - printf ("client %d created success\n", i); - } - } - - for (i = 0; i < fdNumber; i++) - { - optval = 1; - ret = - setsockopt (c_socketfd[i], SOL_SOCKET, SO_REUSEADDR, (void *) &optval, - sizeof (optval)); - if (ret == -1) - { - printf ("Couldn't setsockopt(SO_REUSEADDR)\n"); - break; - } - } - - for (i = 0; i < fdNumber; i++) - { - g_src.sin_port = htons (srcPort + i); - errbind[i] = - _BIND (c_socketfd[i], (struct sockaddr *) &g_src, sizeof (g_src)); - if (errbind[i] < 0) - { - printf ("client %d bind Failed %d\n", i, errno); - _CLOSE (c_socketfd[i]); - c_socketfd[i] = -1; - continue; - } - else - { - printf ("client %d bind Success port:%d IP:%s\n", i, - ntohs (g_src.sin_port), - inet_ntoa (*((struct in_addr *) &(g_src.sin_addr.s_addr)))); - } - } - for (i = 0; i < fdNumber; i++) - { - if (errbind[i] >= 0) - { - errconn[i] = - _CONNECT (c_socketfd[i], (struct sockaddr *) &g_dest, - sizeof (g_dest)); - if (errconn[i] < 0) - { - printf ("client %d Connect Failed %d\n", i, errno); - _CLOSE (c_socketfd[i]); - c_socketfd[i] = -1; - continue; - } - else - { - printf ("client %d Connect Success port:%d, IP:%s\n", i, - ntohs (g_dest.sin_port), - inet_ntoa (* - ((struct in_addr *) - &(g_dest.sin_addr.s_addr)))); - } - } - } - - sleep (1); - - clock_gettime (CLOCK_MONOTONIC, &startTime); - clock_gettime (CLOCK_MONOTONIC, &countStart); - - for (t = 0; t < times; t++) - { - for (i = 0; i < fdNumber; i++) - { - if (c_socketfd[i] < 0) - { - continue; - } - do - { - sendLen = _SEND (c_socketfd[i], send_buf, msg_length, 0); - } - while (sendLen <= 0); - send_count[i]++; - } - - if (0 != sleepTime) - { - if ((t % sleepCnt) == 0) - { - usleep (sleepTime); - } - } - - if ((send_count[0] % unitPrint) == 0) - { - clock_gettime (CLOCK_MONOTONIC, &countEnd); - - pps_time = - (countEnd.tv_sec - countStart.tv_sec) * 1000000000 + - countEnd.tv_nsec - countStart.tv_nsec; - pps = ((float) 1000000000 / pps_time) * unitPrint * fdNumber; - if ((flagPrint != 0)) - { - printf (" sendcount %d, time: %ld ns\n", - send_count[0] * fdNumber, pps_time); - } - printf ("sendcount %d , pps=%d\n", send_count[0] * fdNumber, pps); - clock_gettime (CLOCK_MONOTONIC, &countStart); - } - - } - - clock_gettime (CLOCK_MONOTONIC, &endTime); - - for (i = 0; i < fdNumber; i++) - { - printf ("client %d send %d , sendtime :%ld s %ld ns\n", i, - send_count[i], endTime.tv_sec - startTime.tv_sec, - endTime.tv_nsec - startTime.tv_nsec); - } - - for (i = 0; i < fdNumber; i++) - { - printf ("client %d close!\n", i); - if (c_socketfd[i] > 0) - _CLOSE (c_socketfd[i]); - } - - pthread_exit (NULL); -} - -/* - using this thread to do recv msg; -*/ -void * -process_server_msg_thread (void *pArgv) -{ - int recvLen = 0, recvLen2 = 0; - char send_buf[1000]; - char recv_buf[1000]; - int recv_count = 0; - long recv_ppstime = 0; - int recv_pps = 0; - int ret; - struct epoll_event event; - - struct epoll_event eventList[MAX_EVENTS]; - - struct timespec recvStart; - struct timespec recvEnd; - memset (&recvStart, 0, sizeof (recvStart)); - memset (&recvEnd, 0, sizeof (recvEnd)); - - pthread_detach (pthread_self ()); - - int msgEpFd = epoll_create (100); - int msgFd = *(int *) pArgv; - - event.events = EPOLLIN | EPOLLET; - event.data.fd = msgFd; - if (epoll_ctl (msgEpFd, EPOLL_CTL_ADD, msgFd, &event) < 0) - { - printf ("epoll add fd[%d] to msgEpfd:[%d] failed\n", msgFd, msgEpFd); - close (msgEpFd); - close (msgFd); - return NULL; - } - - clock_gettime (CLOCK_MONOTONIC, &recvStart); - while (1) - { - int timeout = -1; - int m; - int sock; - ret = epoll_wait (msgEpFd, eventList, MAX_EVENTS, timeout); - if (ret == 0) - continue; - - for (m = 0; m < ret; m++) - { - if ((eventList[m].events & EPOLLERR) - || (eventList[m].events & EPOLLHUP) - || !(eventList[m].events & EPOLLIN)) - { - printf ("fd %d epoll error event:%d\n", eventList[m].data.fd, - eventList[m].events); - close (eventList[m].data.fd); - continue; - } - else - { - recvLen = 0; - recvLen2 = 0; - sock = eventList[m].data.fd; - - do - { - recvLen2 = - recv (sock, recv_buf + recvLen, msg_length - recvLen, 0); - if (recvLen2 <= 0) - { - break; - } - else if (recvLen2 == msg_length - recvLen) - { - recvLen = 0; - recv_count++; - if (msg_length != send (sock, send_buf, msg_length, 0)) - { - printf ("send failed!====, need exit\n"); - } - } - else if (recvLen2 < msg_length - recvLen) - { - recvLen += recvLen2; - } - if ((flagPrint != 0) && ((recv_count % unitPrint) == 0)) - { - clock_gettime (CLOCK_MONOTONIC, &recvEnd); - recv_ppstime = - (recvEnd.tv_sec - recvStart.tv_sec) * 1000000000 + - recvEnd.tv_nsec - recvStart.tv_nsec; - recv_pps = - ((float) 1000000000 / recv_ppstime) * unitPrint; - printf ("receive count:%d, receive time: %ld ns\n", - recv_count, recv_ppstime); - printf ("receive pps = %d\n", recv_pps); - clock_gettime (CLOCK_MONOTONIC, &recvStart); - } - } - while (1); - } - - } - - if (recv_count == times) - { - break; - } - } - close (msgFd); - close (msgEpFd); -} - -/* - using this thread to do accept connect -*/ -void * -process_server_accept_thread (void *pArgv) -{ - int listenFd = 0; - int x, optval, ret = 0; - int acpt_socketfd[1000] = { 0 }; - - listenFd = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP); - if (0 > listenFd) - { - printf ("ERROR:socket failed,errno [%d]\n", errno); - return NULL; - } - else - { - printf ("INFO:Create listen socket Success, listenFd[%d]\n", listenFd); - } - - if (0 > fcntl (listenFd, F_SETFL, O_NONBLOCK)) - { - printf ("ERROR:fcntl failed. fd[%d], errno[%d]/n", listenFd, errno); - close (listenFd); - } - - optval = 1; - ret = - setsockopt (listenFd, SOL_SOCKET, SO_REUSEADDR, (void *) &optval, - sizeof (optval)); - if (ret == -1) - { - printf ("ERROR:setsockopt failed. fd[%d], errno[%d]\n", listenFd, - errno); - close (listenFd); - return NULL; - } - - if (0 != - bind (listenFd, (struct sockaddr *) &g_recv, sizeof (struct sockaddr))) - { - printf ("ERROR:bind failed. fd[%d] errno [%d]\n", listenFd, errno); - printf ("INFO:Bind Failed, port %d IP:%s\n", ntohs (g_recv.sin_port), - inet_ntoa (*((struct in_addr *) &(g_recv.sin_addr.s_addr)))); - close (listenFd); - //return NULL; - exit (-1); - } - else - { - printf ("INFO:Bind Success, port %d IP:%s\n", ntohs (g_recv.sin_port), - inet_ntoa (*((struct in_addr *) &(g_recv.sin_addr.s_addr)))); - } - - if (0 != listen (listenFd, 100)) - { - printf ("server socket listen failed. err %d\n", errno); - close (listenFd); - return NULL; - } - printf ("Listen Success\n"); - - int accEpFd; - struct epoll_event eventList[100]; - accEpFd = epoll_create (100); - struct epoll_event event; - event.events = EPOLLIN | EPOLLET; - event.data.fd = listenFd; - - if (epoll_ctl (accEpFd, EPOLL_CTL_ADD, listenFd, &event) < 0) - { - printf ("epoll_ctl add [%d] to epfd:%d failed\n", listenFd, accEpFd); - exit (-1); - } - - int timeout = -1; - int accpedNum = 0; - while (accpedNum < connectNum) - { - ret = epoll_wait (accEpFd, eventList, connectNum, timeout); - - if (ret < 0) - { - printf ("accept_thread epoll_wait error, epfd[%d], errno[%d]\n", - accEpFd, errno); - continue; - } - else if (ret == 0) - continue; - - /*loop done ever Event */ - for (x = 0; x < ret; x++) - { - printf ("event:%d; ret:%d\n", eventList[x].events, ret); - if ((eventList[x].events & EPOLLERR) - || !(eventList[x].events & EPOLLIN)) - { - printf ("epoll fd %d error\n", eventList[x].data.fd); - close (eventList[x].data.fd); - continue; - } - - while (1) - { - acpt_socketfd[accpedNum] = - accept4 (listenFd, NULL, NULL, SOCK_NONBLOCK); - if (acpt_socketfd[accpedNum] < 0) - { - printf ("no more connect\n"); - break; - } - /*add new accptFd to MsgEpFD */ - pthread_t ser_rcv_thread_id; - if (pthread_create - (&ser_rcv_thread_id, NULL, process_server_msg_thread, - (void *) &acpt_socketfd[accpedNum]) == -1) - { - printf ("create process_server_msg_thread fail\n"); - break; - } - - printf ("accept cnt [%d], cur accept fd [%d]\n", accpedNum, - acpt_socketfd[accpedNum]); - accpedNum++; - } - } - } - - close (listenFd); - close (accEpFd); - - while (1) - { - sleep (10); - } - - pthread_exit (NULL); -} - -void -main (int argc, char *argv[]) -{ - socklen_t addrlen = sizeof (struct sockaddr); - int err = 0, result = 0, ret = 0; - int i = 0, j = 0, optval = 0, z = 0, x, listenfd; - cpu_set_t mask; - - setArgsDefault (); - ret = process_arg (argc, argv); - if (ret != 1) - { - printf ("The param error\n"); - return; - } - - pthread_t server_thread_id; - - if (pthread_create - (&server_thread_id, NULL, process_server_accept_thread, NULL) == -1) - { - printf ("create process_server_accept_thread fail\n"); - return; - } - - printf ("create process_server_accept_thread success\n"); - - if (server_thread_id != 0) - { - printf ("Server Thread join\n"); - pthread_join (server_thread_id, NULL); - } - - while (1) - { - sleep (10); - } - - return; -} diff --git a/app_example/perf-test/multi_tcp_select_app_Ser.c b/app_example/perf-test/multi_tcp_select_app_Ser.c deleted file mode 100644 index c1afe62..0000000 --- a/app_example/perf-test/multi_tcp_select_app_Ser.c +++ /dev/null @@ -1,436 +0,0 @@ -/* -* -* Copyright (c) 2018 Huawei Technologies Co.,Ltd. -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at: -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#define _GNU_SOURCE -#include <sys/socket.h> -#include <fcntl.h> -#include <memory.h> -#include <signal.h> -#include <stdio.h> -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> -#include <sys/stat.h> -#include <netinet/in.h> -#include <time.h> -#include <linux/tcp.h> -#include <sched.h> -#include <pthread.h> -#include <arpa/inet.h> -#include <sys/epoll.h> -#include <errno.h> - -#define _BIND bind -#define _LISTEN listen -#define _SOCKET socket -#define _ACCEPT accept -#define _SEND send -#define _RECV recv -#define _CLOSE close -#define _CONNECT connect -#define _PROTOCOL IPPROTO_TCP - -#define MAX_TEST_TIME 1000 -#define MSG_LENGTH 256 -#define CORE_NUM 8 -#define START_CPU_ID 2 -#define MAX_CONN_LIMIT 256 -#define MAX_PORT_NUM 65535 -//1:A-B ;0:A-B-A -#define SEND_RECV_MODE 1 -#define MAX_EVENTS 1000 -#define Default_PortID 12345 -#define Default_SleepCnt 10000 -#define Default_SleepTime 1000000 -#define Flag_Print 1 -#define Fd_Number 1 - -static struct sockaddr_in g_dest; -static struct sockaddr_in g_src; -static struct sockaddr_in g_recv; - -int times = MAX_TEST_TIME; -int msg_length = MSG_LENGTH; -int coreNum = CORE_NUM; -int startCPUId = START_CPU_ID; -int connectNum = MAX_CONN_LIMIT; -int msgMode = SEND_RECV_MODE; -int sleepCnt = Default_SleepCnt; -int sleepTime = Default_SleepTime; //us -int fdNumber = Fd_Number; -int flagPrint = Flag_Print; -int unitPrint = 0; -int waitTime = 0; - -int srcPort = Default_PortID; -int destPort = 0; -int recvPort = 0; -char sendarr[256] = ""; -char recvarr[256] = ""; -char destarr[256] = ""; - -static void -setArgsDefault () -{ - - memset (&g_dest, 0, sizeof (g_dest)); - g_dest.sin_family = AF_INET; - g_dest.sin_addr.s_addr = inet_addr ("127.0.0.1"); - g_dest.sin_port = htons (12345); - bzero (&(g_dest.sin_zero), 8); - - memset (&g_src, 0, sizeof (g_src)); - g_src.sin_family = AF_INET; - g_src.sin_addr.s_addr = inet_addr ("0.0.0.0"); - g_src.sin_port = htons (7895); - bzero (&(g_src.sin_zero), 8); - - memset (&g_recv, 0, sizeof (g_recv)); - g_recv.sin_family = AF_INET; - g_recv.sin_addr.s_addr = inet_addr ("0.0.0.0"); - g_recv.sin_port = htons (7895); - bzero (&(g_recv.sin_zero), 8); - -} - -static int -process_arg (int argc, char *argv[]) -{ - int opt = 0; - int error = 0; - const char *optstring = "p:d:s:a:l:t:e:i:f:r:n:w:u:x:"; - int rw_mark = 0; - - if (argc < 4) - { - printf - ("Param info :-p dest_portid; -d dest_serverIP; -a src_portid; -s src_clientIP; -l msg_length; \n"); - printf - ("\t-t MAX_TEST_TIME; -i msg_interval ; -f client fd number ; -r receive port; -n connectNum(one server vs n client)\n"); - return 0; - } - while ((opt = getopt (argc, argv, optstring)) != -1) - { - switch (opt) - { - case 'p': - destPort = atoi (optarg); - g_dest.sin_port = htons (atoi (optarg)); - break; - case 'd': - stpcpy (destarr, optarg); - g_dest.sin_addr.s_addr = inet_addr (optarg); - break; - case 's': - stpcpy (sendarr, optarg); - g_src.sin_addr.s_addr = inet_addr (optarg); - g_recv.sin_addr.s_addr = inet_addr (optarg); - break; - case 'a': - //g_src.sin_port = htons(atoi(optarg)); - srcPort = atoi (optarg); - break; - case 'l': - msg_length = atoi (optarg); - break; - case 't': - times = atoi (optarg); - break; - case 'e': - sleepCnt = atoi (optarg); - break; - case 'i': - sleepTime = atoi (optarg); - break; - case 'f': - fdNumber = atoi (optarg); - break; - case 'r': - recvPort = atoi (optarg); - g_recv.sin_port = htons (atoi (optarg)); - break; - case 'n': - connectNum = atoi (optarg); - break; - case 'w': - waitTime = atoi (optarg); - break; - case 'u': - unitPrint = atoi (optarg); - break; - case 'x': - flagPrint = atoi (optarg); - break; - - } - } - return 1; -} - -/* - using this thread to do recv msg; -*/ -void * -process_server_msg_thread (void *pArgv) -{ - int recvLen = 0, recvLen2 = 0; - char send_buf[1000]; - char recv_buf[1000]; - int recv_count = 0; - long recv_ppstime = 0; - int recv_pps = 0; - int ret; - struct timeval timeout; - fd_set rfds; - int maxfd; - - struct timespec recvStart; - struct timespec recvEnd; - memset (&recvStart, 0, sizeof (recvStart)); - memset (&recvEnd, 0, sizeof (recvEnd)); - - pthread_detach (pthread_self ()); - - int msgFd = *(int *) pArgv; - - clock_gettime (CLOCK_MONOTONIC, &recvStart); - while (1) - { - FD_ZERO (&rfds); - FD_SET (msgFd, &rfds); - maxfd = msgFd + 1; - timeout.tv_sec = 10; - timeout.tv_usec = 0; - ret = select (maxfd, &rfds, NULL, NULL, &timeout); - - if (ret <= 0) - { - continue; - } - - if (FD_ISSET (msgFd, &rfds) == 0) - { - continue; - } - - recvLen = 0; - recvLen2 = 0; - - do - { - recvLen2 = - recv (msgFd, recv_buf + recvLen, msg_length - recvLen, 0); - if (recvLen2 <= 0) - { - break; - } - else if (recvLen2 == msg_length - recvLen) - { - recvLen = 0; - recv_count++; - if (msg_length != send (msgFd, send_buf, msg_length, 0)) - { - printf ("send failed!====, need exit\n"); - } - } - else if (recvLen2 < msg_length - recvLen) - { - recvLen += recvLen2; - } - if ((flagPrint != 0) && ((recv_count % unitPrint) == 0)) - { - clock_gettime (CLOCK_MONOTONIC, &recvEnd); - recv_ppstime = - (recvEnd.tv_sec - recvStart.tv_sec) * 1000000000 + - recvEnd.tv_nsec - recvStart.tv_nsec; - recv_pps = ((float) 1000000000 / recv_ppstime) * unitPrint; - printf ("receive count:%d, receive time: %ld ns\n", - recv_count, recv_ppstime); - printf ("receive pps = %d\n", recv_pps); - clock_gettime (CLOCK_MONOTONIC, &recvStart); - } - } - while (1); - - if (recv_count == times) - { - break; - } - } - close (msgFd); -} - -/* - using this thread to do accept connect -*/ -void * -process_server_accept_thread (void *pArgv) -{ - int listenFd = 0; - int x, optval, ret, m = 0; - int acpt_socketfd[1000] = { 0 }; - struct timeval timeout; - fd_set rfds; - int maxfd; - - listenFd = socket (PF_INET, SOCK_STREAM, IPPROTO_TCP); - if (0 > listenFd) - { - printf ("ERROR:socket failed,errno [%d]\n", errno); - return NULL; - } - else - { - printf ("INFO:Create listen socket Success, listenFd[%d]\n", listenFd); - } - - if (0 > fcntl (listenFd, F_SETFL, O_NONBLOCK)) - { - printf ("ERROR:fcntl failed. fd[%d], errno[%d]/n", listenFd, errno); - close (listenFd); - } - - optval = 1; - ret = - setsockopt (listenFd, SOL_SOCKET, SO_REUSEADDR, (void *) &optval, - sizeof (optval)); - if (ret == -1) - { - printf ("ERROR:setsockopt failed. fd[%d], errno[%d]\n", listenFd, - errno); - close (listenFd); - return NULL; - } - - if (0 != - bind (listenFd, (struct sockaddr *) &g_recv, sizeof (struct sockaddr))) - { - printf ("ERROR:bind failed. fd[%d] errno [%d]\n", listenFd, errno); - printf ("INFO:Bind Failed, port %d IP:%s\n", ntohs (g_recv.sin_port), - inet_ntoa (*((struct in_addr *) &(g_recv.sin_addr.s_addr)))); - close (listenFd); - //return NULL; - exit (-1); - } - else - { - printf ("INFO:Bind Success, port %d IP:%s\n", ntohs (g_recv.sin_port), - inet_ntoa (*((struct in_addr *) &(g_recv.sin_addr.s_addr)))); - } - - if (0 != listen (listenFd, 100)) - { - printf ("server socket listen failed. err %d\n", errno); - close (listenFd); - return NULL; - } - printf ("Listen Success\n"); - - int accpedNum = 0; - while (accpedNum < connectNum) - { - FD_ZERO (&rfds); - FD_SET (listenFd, &rfds); - maxfd = listenFd + 1; - timeout.tv_sec = 10; - timeout.tv_usec = 0; - ret = select (maxfd, &rfds, NULL, NULL, &timeout); - - if (ret <= 0) - { - continue; - } - - if (FD_ISSET (listenFd, &rfds) == 0) - { - continue; - } - - while (1) - { - acpt_socketfd[accpedNum] = - accept4 (listenFd, NULL, NULL, SOCK_NONBLOCK); - if (acpt_socketfd[accpedNum] < 0) - { - printf ("no more connect\n"); - break; - } - /*add new accptFd to MsgEpFD */ - pthread_t ser_rcv_thread_id; - if (pthread_create - (&ser_rcv_thread_id, NULL, process_server_msg_thread, - (void *) &acpt_socketfd[accpedNum]) == -1) - { - printf ("create process_server_msg_thread fail\n"); - break; - } - - printf ("accept cnt [%d], cur accept fd [%d]\n", accpedNum, - acpt_socketfd[accpedNum]); - accpedNum++; - } - } - - close (listenFd); - - while (1) - { - sleep (10); - } - - pthread_exit (NULL); -} - -void -main (int argc, char *argv[]) -{ - socklen_t addrlen = sizeof (struct sockaddr); - int err = 0, result = 0, ret = 0; - int i = 0, j = 0, optval = 0, z = 0, x, listenfd; - cpu_set_t mask; - - setArgsDefault (); - ret = process_arg (argc, argv); - if (ret != 1) - { - printf ("The param error\n"); - return; - } - - pthread_t server_thread_id; - - if (pthread_create - (&server_thread_id, NULL, process_server_accept_thread, NULL) == -1) - { - printf ("create process_server_accept_thread fail\n"); - return; - } - - printf ("create process_server_accept_thread success\n"); - - if (server_thread_id != 0) - { - printf ("Server Thread join\n"); - pthread_join (server_thread_id, NULL); - } - - while (1) - { - sleep (10); - } - - return; -} |