@@ -211,7 +211,7 @@ Percentage of the requests served within a certain time (ms)
211211 100% 38 (longest request)
212212` ` `
213213
214- # Source Code
214+ # Test Code
215215# # Python version
216216` ` ` python
217217import asyncio
@@ -242,17 +242,12 @@ asyncio.run(main())
242242# # This project
243243` ` ` cpp
244244Task<> handle_echo(Stream stream) {
245- auto& sockinfo = stream.get_sock_info ();
246- auto sa = reinterpret_cast< const sockaddr* >( & sockinfo) ;
247- char addr[INET6_ADDRSTRLEN] {};
248-
249245 while (true) {
250246 auto data = (co_await stream.read(200));
251247 if (data.empty()) { break ; }
252248 co_await stream.write(data);
253249 }
254250
255-
256251 stream.close ();
257252}
258253
@@ -299,107 +294,105 @@ int main(int argc, char *argv[])
299294 exit(0);
300295 }
301296
302- // some variables we need
303- int portno = strtol(argv[1], NULL, 10);
304- struct sockaddr_in server_addr, client_addr;
305- socklen_t client_len = sizeof(client_addr);
297+ // some variables we need
298+ int portno = strtol(argv[1], NULL, 10);
299+ struct sockaddr_in server_addr, client_addr;
300+ socklen_t client_len = sizeof(client_addr);
306301
307- char buffer[MAX_MESSAGE_LEN];
308- memset(buffer, 0, sizeof(buffer));
302+ char buffer[MAX_MESSAGE_LEN];
303+ memset(buffer, 0, sizeof(buffer));
309304
310305
311- // setup socket
312- int sock_listen_fd = socket(AF_INET, SOCK_STREAM, 0);
313- if (sock_listen_fd < 0) {
314- error(" Error creating socket..\n" );
315- }
306+ // setup socket
307+ int sock_listen_fd = socket(AF_INET, SOCK_STREAM, 0);
308+ if (sock_listen_fd < 0) {
309+ error(" Error creating socket..\n" );
310+ }
316311 int yes = 1;
317312 // lose the pesky " address already in use" error message
318313 setsockopt(sock_listen_fd, SOL_SOCKET, SO_REUSEADDR, & yes, sizeof(yes));
319314
320- memset(( char * )& server_addr, 0 , sizeof(server_addr)) ;
321- server_addr.sin_family = AF_INET;
322- server_addr.sin_port = htons(portno);
323- server_addr.sin_addr.s_addr = INADDR_ANY;
315+ memset(( char * )& server_addr, 0 , sizeof(server_addr)) ;
316+ server_addr.sin_family = AF_INET;
317+ server_addr.sin_port = htons(portno);
318+ server_addr.sin_addr.s_addr = INADDR_ANY;
324319
325320
326- // bind socket and listen for connections
327- if (bind(sock_listen_fd, (struct sockaddr * )& server_addr, sizeof(server_addr)) < 0)
328- error(" Error binding socket..\n" );
321+ // bind socket and listen for connections
322+ if (bind(sock_listen_fd, (struct sockaddr * )& server_addr, sizeof(server_addr)) < 0)
323+ error(" Error binding socket..\n" );
329324
330- if (listen(sock_listen_fd, BACKLOG) < 0) {
325+ if (listen(sock_listen_fd, BACKLOG) < 0) {
331326 error(" Error listening..\n" );
332327 }
333- printf(" epoll echo server listening for connections on port: %d\n" , portno);
334-
335-
336- struct epoll_event ev, events[MAX_EVENTS];
337- int new_events, sock_conn_fd, epollfd;
338-
339- epollfd = epoll_create(MAX_EVENTS);
340- if (epollfd < 0)
341- {
342- error(" Error creating epoll..\n" );
343- }
344- ev.events = EPOLLIN;
345- ev.data.fd = sock_listen_fd;
346-
347- if (epoll_ctl(epollfd, EPOLL_CTL_ADD, sock_listen_fd, & ev) == -1)
348- {
349- error(" Error adding new listeding socket to epoll..\n" );
350- }
351-
352- while(1)
353- {
354- new_events = epoll_wait(epollfd, events, MAX_EVENTS, -1);
355-
356- if (new_events == -1)
357- {
358- error(" Error in epoll_wait..\n" );
359- }
360-
361- for (int i = 0; i < new_events; ++i)
362- {
363- if (events[i].data.fd == sock_listen_fd)
364- {
365- sock_conn_fd = accept4(sock_listen_fd, (struct sockaddr * )& client_addr, & client_len, SOCK_NONBLOCK);
366- if (sock_conn_fd == -1)
367- {
368- error(" Error accepting new connection..\n" );
369- }
370-
371- ev.events = EPOLLIN | EPOLLET;
372- ev.data.fd = sock_conn_fd;
373- if (epoll_ctl(epollfd, EPOLL_CTL_ADD, sock_conn_fd, & ev) == -1)
374- {
375- error(" Error adding new event to epoll..\n" );
376- }
377- }
378- else
379- {
380- int newsockfd = events[i].data.fd;
381- int bytes_received = recv(newsockfd, buffer, MAX_MESSAGE_LEN, 0);
382- if (bytes_received < = 0)
383- {
384- epoll_ctl(epollfd, EPOLL_CTL_DEL, newsockfd, NULL);
385- shutdown(newsockfd, SHUT_RDWR);
386- }
387- else
388- {
389- send(newsockfd, buffer, bytes_received, 0);
390- }
391- }
392- }
393- }
394- }
328+ printf(" epoll echo server listening for connections on port: %d\n" , portno);
395329
396330
331+ struct epoll_event ev, events[MAX_EVENTS];
332+ int new_events, sock_conn_fd, epollfd;
333+
334+ epollfd = epoll_create(MAX_EVENTS);
335+ if (epollfd < 0)
336+ {
337+ error(" Error creating epoll..\n" );
338+ }
339+ ev.events = EPOLLIN;
340+ ev.data.fd = sock_listen_fd;
341+
342+ if (epoll_ctl(epollfd, EPOLL_CTL_ADD, sock_listen_fd, & ev) == -1)
343+ {
344+ error(" Error adding new listeding socket to epoll..\n" );
345+ }
346+
347+ while(1)
348+ {
349+ new_events = epoll_wait(epollfd, events, MAX_EVENTS, -1);
350+
351+ if (new_events == -1)
352+ {
353+ error(" Error in epoll_wait..\n" );
354+ }
355+
356+ for (int i = 0; i < new_events; ++i)
357+ {
358+ if (events[i].data.fd == sock_listen_fd)
359+ {
360+ sock_conn_fd = accept4(sock_listen_fd, (struct sockaddr * )& client_addr, & client_len, SOCK_NONBLOCK);
361+ if (sock_conn_fd == -1)
362+ {
363+ error(" Error accepting new connection..\n" );
364+ }
365+
366+ ev.events = EPOLLIN | EPOLLET;
367+ ev.data.fd = sock_conn_fd;
368+ if (epoll_ctl(epollfd, EPOLL_CTL_ADD, sock_conn_fd, & ev) == -1)
369+ {
370+ error(" Error adding new event to epoll..\n" );
371+ }
372+ }
373+ else
374+ {
375+ int newsockfd = events[i].data.fd;
376+ int bytes_received = recv(newsockfd, buffer, MAX_MESSAGE_LEN, 0);
377+ if (bytes_received < = 0)
378+ {
379+ epoll_ctl(epollfd, EPOLL_CTL_DEL, newsockfd, NULL);
380+ shutdown(newsockfd, SHUT_RDWR);
381+ }
382+ else
383+ {
384+ send(newsockfd, buffer, bytes_received, 0);
385+ }
386+ }
387+ }
388+ }
389+ }
397390
398391void error(char* msg)
399392{
400- perror(msg);
401- printf(" erreur...\n" );
402- exit(1);
393+ perror(msg);
394+ printf(" erreur...\n" );
395+ exit(1);
403396}
404397` ` `
405398
0 commit comments