@@ -20,9 +20,30 @@ extern "C"
2020#include < vector>
2121
2222
23- constexpr size_t clients_count = 10 ;
2423constexpr size_t buffer_size = 255 ;
2524
25+
26+ void recv_data (
27+ const socket_wrapper::SocketWrapper &sock_wrap, const socket_wrapper::Socket &client_sock,
28+ std::array<char , buffer_size> &data_buff)
29+ {
30+ if (ssize_t n = recv (client_sock, data_buff.data (), data_buff.size (), 0 ); n < 0 )
31+ {
32+ throw std::system_error (sock_wrap.get_last_error_code (), std::system_category (), " recv data" );
33+ }
34+ else if (!n)
35+ {
36+ std::cout << " No data, exiting..." << std::endl;
37+ exit (EXIT_SUCCESS);
38+ }
39+ else
40+ {
41+ std::cout << " Ordinary data received...\n "
42+ << n << " bytes was read: " << std::string (data_buff.begin (), data_buff.begin () + n) << std::endl;
43+ }
44+ }
45+
46+
2647int main (int argc, const char *const argv[])
2748{
2849 if (argc != 2 )
@@ -45,15 +66,17 @@ int main(int argc, const char *const argv[])
4566
4667 while (true )
4768 {
48- int at_mark = sockatmark (client_sock);
49-
50- switch (at_mark)
69+ switch (sockatmark (client_sock))
5170 {
5271 case -1 :
5372 throw std::system_error (errno, std::system_category (), " sockatmark" );
5473 break ;
5574 case 1 :
56- if (oob_printed) continue ;
75+ if (oob_printed)
76+ {
77+ recv_data (sock_wrap, client_sock, data_buff);
78+ continue ;
79+ }
5780 std::cout << " OOB data received..." << std::endl;
5881
5982 char oob_data;
@@ -65,21 +88,7 @@ int main(int argc, const char *const argv[])
6588 oob_printed = true ;
6689 break ;
6790 case 0 :
68- if (ssize_t n = recv (client_sock, data_buff.data (), data_buff.size (), 0 ); n < 0 )
69- {
70- throw std::system_error (sock_wrap.get_last_error_code (), std::system_category (), " recv data" );
71- }
72- else if (!n)
73- {
74- std::cout << " No data, exiting..." << std::endl;
75- exit (EXIT_SUCCESS);
76- }
77- else
78- {
79- std::cout << " Ordinary data received...\n "
80- << n << " bytes was read: " << std::string (data_buff.begin (), data_buff.begin () + n)
81- << std::endl;
82- }
91+ recv_data (sock_wrap, client_sock, data_buff);
8392 oob_printed = false ;
8493 break ;
8594 default :
0 commit comments