diff --git a/regression/apps/network/socketpair.c b/regression/apps/network/socketpair.c new file mode 100644 index 000000000..0441cc00b --- /dev/null +++ b/regression/apps/network/socketpair.c @@ -0,0 +1,38 @@ +#include +#include +#include +#include +#include +#define MESG1 "Hello from child" +#define MESG2 "Hello from parent" + +int main() { + int sockets[2], child; + char buf[1024]; + if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockets) < 0) { + perror("create socket pair"); + exit(1); + } + if ((child = fork()) == -1) + perror("fork"); + else if (child) { + // parent + close(sockets[0]); + if (read(sockets[1], buf, 1024) < 0) + perror("read from child"); + printf("Receive from child: %s\n", buf); + if (write(sockets[1], MESG2, sizeof(MESG2)) < 0) + perror("write to child"); + close(sockets[1]); + } else { + // child + close(sockets[1]); + if (write(sockets[0], MESG1, sizeof(MESG1)) < 0) + perror("write to parent"); + if (read(sockets[0], buf, 1024) < 0) + perror("read from parent"); + printf("Receive from parent: %s\n", buf); + close(sockets[0]); + } + return 0; +} \ No newline at end of file diff --git a/regression/apps/network/unix_client.c b/regression/apps/network/unix_client.c new file mode 100644 index 000000000..041ab1f06 --- /dev/null +++ b/regression/apps/network/unix_client.c @@ -0,0 +1,63 @@ +#include +#include +#include +#include +#include +#include +#include + +#define SOCKET_NAME "/tmp/test.sock" +#define BUFFER_SIZE 128 + +int main() { + int client_fd, len; + struct sockaddr_un server_addr, peer_addr; + char buf[BUFFER_SIZE]; + + // Create Client Socket + client_fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (client_fd == -1) { + perror("socket"); + exit(EXIT_FAILURE); + } + + // Connect Server + memset(&server_addr, 0, sizeof(server_addr)); + server_addr.sun_family = AF_UNIX; + strncpy(server_addr.sun_path, SOCKET_NAME, sizeof(server_addr.sun_path) - 1); + + if (connect(client_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) { + perror("connect"); + exit(EXIT_FAILURE); + } + + int addrlen = sizeof(peer_addr); + int rc = getpeername(client_fd, (struct sockaddr *)&peer_addr, + &addrlen); + if (rc == -1) { + perror("getpeername"); + exit(EXIT_FAILURE); + } + printf("server path = %s\n", peer_addr.sun_path); + // Read from server + memset(buf, 0, BUFFER_SIZE); + if (read(client_fd, buf, BUFFER_SIZE) == -1) { + perror("read"); + exit(EXIT_FAILURE); + } + + printf("Client Received: %s\n", buf); + + // Send message to server + printf("Client is connected to server\n"); + char* mesg = "Hello from unix socket client"; + if (write(client_fd, mesg, strlen(mesg)) == -1) { + perror("write"); + exit(EXIT_FAILURE); + } + + // Close socket + close(client_fd); + + return 0; +} \ No newline at end of file diff --git a/regression/apps/network/unix_server.c b/regression/apps/network/unix_server.c new file mode 100644 index 000000000..f2ca1c9cc --- /dev/null +++ b/regression/apps/network/unix_server.c @@ -0,0 +1,76 @@ +#include +#include +#include +#include +#include +#include +#include + +#define SOCKET_NAME "/tmp/test.sock" +#define BUFFER_SIZE 128 + +int main() { + int server_fd, accepted_fd, len; + struct sockaddr_un server_addr, client_addr; + char buf[BUFFER_SIZE]; + + // 创建Server Socket + server_fd = socket(AF_UNIX, SOCK_STREAM, 0); + if (server_fd == -1) { + perror("socket"); + exit(EXIT_FAILURE); + } + + // 绑定Socket地址 + memset(&server_addr, 0, sizeof(server_addr)); + server_addr.sun_family = AF_UNIX; + strncpy(server_addr.sun_path, SOCKET_NAME, sizeof(server_addr.sun_path) - 1); + + if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) { + perror("bind"); + exit(EXIT_FAILURE); + } + + // 监听连接请求 + if (listen(server_fd, 5) == -1) { + perror("listen"); + exit(EXIT_FAILURE); + } + + printf("Server is listening...\n"); + + // 接收连接请求 + len = sizeof(client_addr); + accepted_fd = accept(server_fd, (struct sockaddr*)&client_addr, &len); + if (accepted_fd == -1) { + perror("accept"); + exit(EXIT_FAILURE); + } + + int addrlen = sizeof(client_addr); + int rc = getpeername(accepted_fd, (struct sockaddr *)&client_addr, + &addrlen); + if (rc == -1) { + perror("getpeername"); + exit(EXIT_FAILURE); + } + printf("accepted client path = %s\n", client_addr.sun_path); + + printf("Server is connected to client\n"); + char* mesg = "Hello from unix socket server"; + write(accepted_fd, mesg, strlen(mesg)); + // 读取客户端发送的数据并打印 + memset(buf, 0, BUFFER_SIZE); + if (read(accepted_fd, buf, BUFFER_SIZE) == -1) { + perror("read"); + exit(EXIT_FAILURE); + } + printf("Server Received: %s\n", buf); + + // 关闭Socket + close(accepted_fd); + close(server_fd); + unlink(SOCKET_NAME); + + return 0; +} \ No newline at end of file diff --git a/regression/apps/scripts/nettest.sh b/regression/apps/scripts/nettest.sh index 0f17522ce..12c10fae5 100755 --- a/regression/apps/scripts/nettest.sh +++ b/regression/apps/scripts/nettest.sh @@ -3,10 +3,10 @@ NETTEST_DIR=/regression/network cd ${NETTEST_DIR} echo "Start net test......" -# ./tcp_server & -# ./tcp_client -# ./udp_server & -# ./udp_client +./tcp_server & +./tcp_client +./udp_server & +./udp_client ./unix_server & ./unix_client ./socketpair