@@ -211,7 +211,7 @@ Percentage of the requests served within a certain time (ms)
211
211
100% 38 (longest request)
212
212
` ` `
213
213
214
- # Source Code
214
+ # Test Code
215
215
# # Python version
216
216
` ` ` python
217
217
import asyncio
@@ -242,17 +242,12 @@ asyncio.run(main())
242
242
# # This project
243
243
` ` ` cpp
244
244
Task<> 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
-
249
245
while (true) {
250
246
auto data = (co_await stream.read(200));
251
247
if (data.empty()) { break ; }
252
248
co_await stream.write(data);
253
249
}
254
250
255
-
256
251
stream.close ();
257
252
}
258
253
@@ -299,107 +294,105 @@ int main(int argc, char *argv[])
299
294
exit(0);
300
295
}
301
296
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);
306
301
307
- char buffer[MAX_MESSAGE_LEN];
308
- memset(buffer, 0, sizeof(buffer));
302
+ char buffer[MAX_MESSAGE_LEN];
303
+ memset(buffer, 0, sizeof(buffer));
309
304
310
305
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
+ }
316
311
int yes = 1;
317
312
// lose the pesky " address already in use" error message
318
313
setsockopt(sock_listen_fd, SOL_SOCKET, SO_REUSEADDR, & yes, sizeof(yes));
319
314
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;
324
319
325
320
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" );
329
324
330
- if (listen(sock_listen_fd, BACKLOG) < 0) {
325
+ if (listen(sock_listen_fd, BACKLOG) < 0) {
331
326
error(" Error listening..\n" );
332
327
}
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);
395
329
396
330
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
+ }
397
390
398
391
void error(char* msg)
399
392
{
400
- perror(msg);
401
- printf(" erreur...\n" );
402
- exit(1);
393
+ perror(msg);
394
+ printf(" erreur...\n" );
395
+ exit(1);
403
396
}
404
397
` ` `
405
398
0 commit comments