@@ -30,6 +30,32 @@ void signal_handler(int signal)
3030}
3131
3232
33+ void recv_data (
34+ const socket_wrapper::SocketWrapper &sock_wrap, const socket_wrapper::Socket &client_sock,
35+ std::array<char , buffer_size> &data_buff)
36+ {
37+ if (ssize_t n = recv (client_sock, data_buff.data (), data_buff.size (), 0 ); n < 0 )
38+ {
39+ if (auto e_code = sock_wrap.get_last_error_code (); EINTR == e_code || EAGAIN == e_code)
40+ {
41+ std::cout << " recv was broken by signal!" << std::endl;
42+ }
43+ else
44+ throw std::system_error (e_code, std::system_category (), " recv data" );
45+ }
46+ else if (!n)
47+ {
48+ std::cout << " No data, exiting..." << std::endl;
49+ exit (EXIT_SUCCESS);
50+ }
51+ else
52+ {
53+ std::cout << " Ordinary data received...\n "
54+ << n << " bytes was read: " << std::string (data_buff.begin (), data_buff.begin () + n) << std::endl;
55+ }
56+ }
57+
58+
3359int main (int argc, const char *const argv[])
3460{
3561 if (argc != 2 )
@@ -66,7 +92,11 @@ int main(int argc, const char *const argv[])
6692 throw std::system_error (sock_wrap.get_last_error_code (), std::system_category (), " sockatmark" );
6793 break ;
6894 case 1 :
69- if (!oob_flag) continue ;
95+ if (!oob_flag)
96+ {
97+ recv_data (sock_wrap, client_sock, data_buff);
98+ continue ;
99+ }
70100 std::cout << " OOB data received..." << std::endl;
71101 char oob_data;
72102 if (recv (client_sock, &oob_data, 1 , MSG_OOB) < 0 )
@@ -81,27 +111,8 @@ int main(int argc, const char *const argv[])
81111 oob_flag = false ;
82112 break ;
83113 case 0 :
84- if (ssize_t n = recv (client_sock, data_buff.data (), data_buff.size (), 0 ); n < 0 )
85- {
86- auto e_code = sock_wrap.get_last_error_code ();
87- if (EINTR == e_code || EAGAIN == e_code)
88- {
89- std::cout << " recv was broken by signal!" << std::endl;
90- continue ;
91- }
92- throw std::system_error (e_code, std::system_category (), " recv data" );
93- }
94- else if (!n)
95- {
96- std::cout << " No data, exiting..." << std::endl;
97- exit (EXIT_SUCCESS);
98- }
99- else
100- {
101- std::cout << " Ordinary data received...\n "
102- << n << " bytes was read: " << std::string (data_buff.begin (), data_buff.begin () + n)
103- << std::endl;
104- }
114+ std::cout << " sockatmark() is 0" << std::endl;
115+ recv_data (sock_wrap, client_sock, data_buff);
105116 break ;
106117 default :
107118 throw std::runtime_error (" unexpected sockatmark" );
0 commit comments