#include #include #include #include #include #include #include #include #include #include #include #include #include "test.h" #define MAXEVENTS 64 #define DEFAULT_PROC_NUM 3 #define DEFAULT_MSG "Hello World!\n" static int create_and_bind() { int listenfd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0); if (listenfd < 0) { printf("create socket error: %s(errno: %d)\n", strerror(errno), errno); return -1; } struct sockaddr_in servaddr = {0}; servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(6667); int reuse = 1; if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) THROW_ERROR("setsockopt port to reuse failed"); int ret = bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)); if (ret < 0) { printf("bind socket error: %s(errno: %d)\n", strerror(errno), errno); return -1; } return listenfd; } int test_ip_socket() { int ret = 0; int server_fd = create_and_bind(); ret = listen(server_fd, DEFAULT_PROC_NUM); if (ret == -1) { THROW_ERROR("failed to listen"); } int epfd = epoll_create1(0); if (epfd == -1) { close(server_fd); THROW_ERROR("epoll_create failed"); } struct epoll_event listened_event; listened_event.data.fd = server_fd; listened_event.events = EPOLLIN | EPOLLET; ret = epoll_ctl(epfd, EPOLL_CTL_ADD, server_fd, &listened_event); if (ret == -1) { close_files(2, server_fd, epfd); THROW_ERROR("epoll_ctl failed"); } int client_pid; int proc_num = DEFAULT_PROC_NUM; char* client_argv[] = {"client", "127.0.0.1", "6667", NULL}; for(int i=0; i