Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <stdio.h>
- #include <sys/socket.h>
- #include <stdlib.h>
- #include <netinet/in.h>
- #include <string.h>
- #include <sys/epoll.h>
- #include <iostream>
- #include "TcpServer.h"
- int main(int argc, char const *argv[]) {
- #define MAX_EVENTS 10
- struct epoll_event ev, events[MAX_EVENTS];
- int nfds, conn_sock, epollfd;
- int server_fd, new_socket, valread;
- struct sockaddr_in address;
- int addrlen = sizeof(address);
- char buffer[1024] = {0};
- if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
- perror("socket failed");
- exit(EXIT_FAILURE);
- }
- address.sin_family = AF_INET;
- address.sin_addr.s_addr = INADDR_ANY;
- address.sin_port = htons(PORT);
- if (bind(server_fd, (struct sockaddr *) &address,
- sizeof(address)) < 0) {
- perror("bind failed");
- exit(EXIT_FAILURE);
- }
- if (listen(server_fd, 3) < 0) {
- perror("listen");
- exit(EXIT_FAILURE);
- }
- epollfd = epoll_create1(0);
- if (epollfd == -1) {
- perror("epoll_create1");
- exit(EXIT_FAILURE);
- }
- ev.events = EPOLLIN;
- ev.data.fd = server_fd;
- if (epoll_ctl(epollfd, EPOLL_CTL_ADD, server_fd, &ev) == -1) {
- perror("epoll_ctl: server_fd");
- exit(EXIT_FAILURE);
- }
- for (;;) {
- nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);
- for (int n = 0; n < nfds; ++n) {
- if (events[n].data.fd == server_fd) {
- conn_sock = accept(server_fd, (struct sockaddr *) &address,
- (socklen_t *) &addrlen);
- ev.events = EPOLLIN | EPOLLET;
- ev.data.fd = conn_sock;
- epoll_ctl(epollfd, EPOLL_CTL_ADD, conn_sock, &ev);
- int len = read(events[n].data.fd, buffer, 1024);
- write(events[n].data.fd, buffer, len);
- }
- }
- }
- // nc -v localhost 8081
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement