2024-03-19 02:45:09 +08:00

63 lines
1.8 KiB
C

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <malloc.h>
#include <mhash.h>
#include <sys/wait.h>
#define FORK_NUM 10
int sub_pid[FORK_NUM] = {0};
void sigint_deal(int sig) {
for (int i = 0; i < FORK_NUM; i++) {
kill(sub_pid[i], SIGINT);
}
exit(0);
}
int main() {
struct hostent *host = gethostbyname("127.0.0.1");
void *buff = malloc(1024);
signal(SIGINT, sigint_deal);
for (int i = 0; i < FORK_NUM; i++) {
int pid = fork();
if (pid == 0) {
//子进程
printf("in sub process\n");
for (int j = 0; j < 100; j++) {
int fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
struct sockaddr_in server_sock;
server_sock.sin_family = AF_INET;
server_sock.sin_port = htons(1234);
server_sock.sin_addr = *((struct in_addr *) host->h_addr);
int ret = connect(fd, (const struct sockaddr *) &server_sock, sizeof(struct sockaddr_in));
if (ret == -1) {
printf("connect error\n");
continue;
}
ret = (int) send(fd, "test", 4, 0);
printf("pid:%d,send test:%d\n", getpid(), ret);
memset(buff, 0, 1024);
ret = (int) recv(fd, buff, 1024, 0);
printf("pid:%d,recv:%s\n", getpid(), (char *) buff);
close(fd);
}
printf("sub process over\n");
return 0;
} else if (pid > 0) {
sub_pid[i] = pid;
printf("my father\n");
} else {
printf("create process error\n");
}
}
for (int i = 0; i < FORK_NUM; i++) {
wait((int *) sub_pid[i]);
}
printf("over\n");
free(buff);
return 0;
}