Add unix stream socket test

This commit is contained in:
Jianfeng Jiang
2023-07-31 19:23:14 +08:00
committed by Tate, Hongliang Tian
parent ddb7be9296
commit af04ef874c
4 changed files with 181 additions and 4 deletions

View File

@ -0,0 +1,38 @@
#include <stdio.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#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;
}

View File

@ -0,0 +1,63 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#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;
}

View File

@ -0,0 +1,76 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#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;
}

View File

@ -3,10 +3,10 @@
NETTEST_DIR=/regression/network NETTEST_DIR=/regression/network
cd ${NETTEST_DIR} cd ${NETTEST_DIR}
echo "Start net test......" echo "Start net test......"
# ./tcp_server & ./tcp_server &
# ./tcp_client ./tcp_client
# ./udp_server & ./udp_server &
# ./udp_client ./udp_client
./unix_server & ./unix_server &
./unix_client ./unix_client
./socketpair ./socketpair