Commit 689317bf authored by Andrey Vagin's avatar Andrey Vagin Committed by Pavel Emelyanov

zdtm: add a set of function for creating a tcp connection

Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 0910b72b
...@@ -2,7 +2,7 @@ CFLAGS = -g -O2 -Wall -Werror -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 ...@@ -2,7 +2,7 @@ CFLAGS = -g -O2 -Wall -Werror -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
LIB = libzdtmtst.a LIB = libzdtmtst.a
LIBSRC = datagen.c msg.c parseargs.c test.c streamutil.c lock.c ns.c LIBSRC = datagen.c msg.c parseargs.c test.c streamutil.c lock.c ns.c tcp.c
LIBOBJ = $(LIBSRC:%.c=%.o) LIBOBJ = $(LIBSRC:%.c=%.o)
LIBDEP = $(LIBSRC:%.c=%.d) LIBDEP = $(LIBSRC:%.c=%.d)
......
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h> /* for sockaddr_in and inet_ntoa() */
#include "zdtmtst.h"
int tcp_init_server(int *port)
{
struct sockaddr_in addr;
int sock;
int yes = 1, ret;
memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("0.0.0.0");
sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == -1) {
err ("socket() failed %m");
return -1;
}
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1 ) {
err("setsockopt() error");
return -1;
}
while (1) {
addr.sin_port = htons(*port);
ret = bind(sock, (struct sockaddr *) &addr, sizeof(addr));
/* crtools doesn't restore sock opts, so we need this hack */
if (ret == -1 && errno == EADDRINUSE) {
test_msg("The port %d is already in use.\n", *port);
(*port)++;
continue;
}
break;
}
if (ret == -1) {
err ("bind() failed %m");
return -1;
}
if (listen(sock, 1) == -1) {
err ("listen() failed %m");
return -1;
}
return sock;
}
int tcp_accept_server(int sock)
{
struct sockaddr_in maddr;
int sock2;
socklen_t addrlen;
#ifdef DEBUG
test_msg ("Waiting for connection..........\n");
#endif
addrlen = sizeof(maddr);
sock2 = accept(sock,(struct sockaddr *) &maddr, &addrlen);
if (sock2 == -1) {
err ("accept() failed %m");
return -1;
}
#ifdef DEBUG
test_msg ("Connection!!\n");
#endif
return sock2;
}
int tcp_init_client(char *servIP, unsigned short servPort)
{
int sock;
struct sockaddr_in servAddr;
if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
err("can't create socket %m");
return -1;
}
/* Construct the server address structure */
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(servIP);
servAddr.sin_port = htons(servPort);
if (connect(sock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0) {
err("can't connect to server %m");
return -1;
}
return sock;
}
...@@ -107,5 +107,8 @@ extern void task_waiter_fini(task_waiter_t *t); ...@@ -107,5 +107,8 @@ extern void task_waiter_fini(task_waiter_t *t);
extern void task_waiter_wait4(task_waiter_t *t, unsigned int lockid); extern void task_waiter_wait4(task_waiter_t *t, unsigned int lockid);
extern void task_waiter_complete(task_waiter_t *t, unsigned int lockid); extern void task_waiter_complete(task_waiter_t *t, unsigned int lockid);
extern void task_waiter_complete_current(task_waiter_t *t); extern void task_waiter_complete_current(task_waiter_t *t);
extern int tcp_init_server(int *port);
extern int tcp_accept_server(int sock);
extern int tcp_init_client(char *servIP, unsigned short servPort);
#endif /* _VIMITESU_H_ */ #endif /* _VIMITESU_H_ */
...@@ -12,21 +12,14 @@ const char *test_author = "Andrew Vagin <avagin@parallels.com>"; ...@@ -12,21 +12,14 @@ const char *test_author = "Andrew Vagin <avagin@parallels.com>";
#include <sys/types.h> #include <sys/types.h>
#include <unistd.h> #include <unistd.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h>
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
#include <stdlib.h> #include <stdlib.h>
#include <aio.h> #include <aio.h>
#include <sys/socket.h>
#include <arpa/inet.h> /* for sockaddr_in and inet_ntoa() */
#include <wait.h> #include <wait.h>
static int port = 8880; static int port = 8880;
int init_client(char *servIP, unsigned short servPort);
int accept_server(int sock);
int init_server();
#define BUF_SIZE 1024 #define BUF_SIZE 1024
int main(int argc, char **argv) int main(int argc, char **argv)
...@@ -41,7 +34,7 @@ int main(int argc, char **argv) ...@@ -41,7 +34,7 @@ int main(int argc, char **argv)
test_init(argc, argv); test_init(argc, argv);
if ((fd_s = init_server()) < 0) { if ((fd_s = tcp_init_server(&port)) < 0) {
err("initializing server failed"); err("initializing server failed");
return 1; return 1;
} }
...@@ -57,7 +50,7 @@ int main(int argc, char **argv) ...@@ -57,7 +50,7 @@ int main(int argc, char **argv)
* Chiled is client of TCP connection * Chiled is client of TCP connection
*/ */
close(fd_s); close(fd_s);
fd = init_client("127.0.0.1", port); fd = tcp_init_client("127.0.0.1", port);
if (fd < 0) if (fd < 0)
return 1; return 1;
...@@ -108,7 +101,7 @@ again: ...@@ -108,7 +101,7 @@ again:
/* /*
* parent is server of TCP connection * parent is server of TCP connection
*/ */
fd = accept_server(fd_s); fd = tcp_accept_server(fd_s);
close(fd_s); close(fd_s);
if (fd < 0) { if (fd < 0) {
err("can't accept client connection %m"); err("can't accept client connection %m");
...@@ -142,83 +135,3 @@ error: ...@@ -142,83 +135,3 @@ error:
wait(&status); wait(&status);
return -1; return -1;
} }
int init_server()
{
struct sockaddr_in addr;
int sock, ret;
memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htons(INADDR_ANY);
sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == -1) {
err ("socket() failed %m");
return -1;
}
while (1) {
addr.sin_port = htons(port);
ret = bind(sock, (struct sockaddr *) &addr, sizeof(addr));
if (ret == -1 && errno == EADDRINUSE) {
test_msg("The port %d is already in use.\n", port);
port++;
continue;
}
break;
}
if (ret == -1) {
err ("bind() failed %m");
return -1;
}
if (listen(sock, 1) == -1) {
err ("listen() failed %m");
return -1;
}
return sock;
}
int accept_server(int sock)
{
struct sockaddr_in maddr;
int sock2;
socklen_t addrlen;
#ifdef DEBUG
test_msg ("Waiting for connection..........\n");
#endif
addrlen = sizeof(maddr);
sock2 = accept(sock,(struct sockaddr *) &maddr, &addrlen);
if (sock2 == -1) {
err ("accept() failed %m");
return -1;
}
#ifdef DEBUG
test_msg ("Connection!!\n");
#endif
return sock2;
}
int init_client(char *servIP, unsigned short servPort)
{
int sock;
struct sockaddr_in servAddr;
if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
err("can't create socket %m");
return -1;
}
/* Construct the server address structure */
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(servIP);
servAddr.sin_port = htons(servPort);
if (connect(sock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0) {
err("can't connect to server %m");
return -1;
}
return sock;
}
...@@ -11,21 +11,12 @@ const char *test_author = "Stanislav Kinsbursky <skinsbursky@openvz.org>"; ...@@ -11,21 +11,12 @@ const char *test_author = "Stanislav Kinsbursky <skinsbursky@openvz.org>";
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>
#include <unistd.h> #include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h> #include <errno.h>
#include <stdlib.h> #include <stdlib.h>
#include <sys/socket.h>
#include <arpa/inet.h> /* for sockaddr_in and inet_ntoa() */
#include <wait.h> #include <wait.h>
static int port = 8880; static int port = 8880;
int init_client(char *servIP, unsigned short servPort);
int accept_server(int sock);
int init_server();
#define BUF_SIZE 1024 #define BUF_SIZE 1024
static void sig_hand(int signo) {} static void sig_hand(int signo) {}
...@@ -45,7 +36,7 @@ int main(int argc, char **argv) ...@@ -45,7 +36,7 @@ int main(int argc, char **argv)
test_init(argc, argv); test_init(argc, argv);
if ((fd_s = init_server()) < 0) { if ((fd_s = tcp_init_server(&port)) < 0) {
err("initializing server failed"); err("initializing server failed");
return 1; return 1;
} }
...@@ -68,7 +59,7 @@ int main(int argc, char **argv) ...@@ -68,7 +59,7 @@ int main(int argc, char **argv)
* Chiled is client of TCP connection * Chiled is client of TCP connection
*/ */
close(fd_s); close(fd_s);
fd = init_client("127.0.0.1", port); fd = tcp_init_client("127.0.0.1", port);
if (fd < 0) if (fd < 0)
return 1; return 1;
...@@ -86,7 +77,7 @@ int main(int argc, char **argv) ...@@ -86,7 +77,7 @@ int main(int argc, char **argv)
/* /*
* parent is server of TCP connection * parent is server of TCP connection
*/ */
fd = accept_server(fd_s); fd = tcp_accept_server(fd_s);
close(fd_s); close(fd_s);
if (fd < 0) { if (fd < 0) {
err("can't accept client connection %m"); err("can't accept client connection %m");
...@@ -118,91 +109,3 @@ error: ...@@ -118,91 +109,3 @@ error:
wait(&status); wait(&status);
return -1; return -1;
} }
int init_server()
{
struct sockaddr_in addr;
int sock;
int yes = 1, ret;
memset(&addr,0,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == -1) {
err ("socket() failed %m");
return -1;
}
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1 ) {
err("setsockopt() error");
return -1;
}
while (1) {
addr.sin_port = htons(port);
ret = bind(sock, (struct sockaddr *) &addr, sizeof(addr));
/* crtools doesn't restore sock opts, so we need this hack */
if (ret == -1 && errno == EADDRINUSE) {
test_msg("The port %d is already in use.\n", port);
port++;
continue;
}
break;
}
if (ret == -1) {
err ("bind() failed %m");
return -1;
}
if (listen(sock, 1) == -1) {
err ("listen() failed %m");
return -1;
}
return sock;
}
int accept_server(int sock)
{
struct sockaddr_in maddr;
int sock2;
socklen_t addrlen;
#ifdef DEBUG
test_msg ("Waiting for connection..........\n");
#endif
addrlen = sizeof(maddr);
sock2 = accept(sock,(struct sockaddr *) &maddr, &addrlen);
if (sock2 == -1) {
err ("accept() failed %m");
return -1;
}
#ifdef DEBUG
test_msg ("Connection!!\n");
#endif
return sock2;
}
int init_client(char *servIP, unsigned short servPort)
{
int sock;
struct sockaddr_in servAddr;
if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
err("can't create socket %m");
return -1;
}
/* Construct the server address structure */
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(servIP);
servAddr.sin_port = htons(servPort);
if (connect(sock, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0) {
err("can't connect to server %m");
return -1;
}
return sock;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment