@@ -133,16 +133,30 @@ namespace aux {
133
133
TORRENT_EXTRA_EXPORT entry save_dht_settings (dht_settings const & settings);
134
134
#endif
135
135
136
- struct listen_socket_impl
136
+ struct listen_socket_t final : aux::session_listen_socket
137
137
{
138
- listen_socket_impl ()
138
+ listen_socket_t ()
139
139
{
140
140
tcp_port_mapping[0 ] = -1 ;
141
141
tcp_port_mapping[1 ] = -1 ;
142
142
udp_port_mapping[0 ] = -1 ;
143
143
udp_port_mapping[1 ] = -1 ;
144
144
}
145
145
146
+ listen_socket_t (listen_socket_t const &) = delete ;
147
+ listen_socket_t (listen_socket_t &&) = delete ;
148
+ listen_socket_t & operator =(listen_socket_t const &) = delete ;
149
+ listen_socket_t & operator =(listen_socket_t &&) = delete ;
150
+
151
+ address get_external_address () override
152
+ { return external_address.external_address (); }
153
+
154
+ tcp::endpoint get_local_endpoint () override
155
+ { return local_endpoint; }
156
+
157
+ bool is_ssl () override
158
+ { return ssl == transport::ssl; }
159
+
146
160
// this may be empty but can be set
147
161
// to the WAN IP address of a NAT router
148
162
ip_voter external_address;
@@ -185,27 +199,6 @@ namespace aux {
185
199
std::shared_ptr<aux::session_udp_socket> udp_sock;
186
200
};
187
201
188
- struct listen_socket_t final : listen_socket_impl, aux::session_listen_socket
189
- {
190
- listen_socket_t (listen_socket_t const &) = delete ;
191
- listen_socket_t (listen_socket_t &&) = delete ;
192
- listen_socket_t & operator =(listen_socket_t const &) = delete ;
193
- listen_socket_t & operator =(listen_socket_t &&) = delete ;
194
-
195
- address get_external_address () override
196
- { return external_address.external_address (); }
197
-
198
- tcp::endpoint get_local_endpoint () override
199
- { return local_endpoint; }
200
-
201
- bool is_ssl () override
202
- { return ssl == transport::ssl; }
203
-
204
- listen_socket_t (listen_socket_impl const & i) // NOLINT
205
- : listen_socket_impl(i)
206
- {}
207
- };
208
-
209
202
struct TORRENT_EXTRA_EXPORT listen_endpoint_t
210
203
{
211
204
listen_endpoint_t (address adr, int p, std::string dev, transport s)
@@ -226,10 +219,10 @@ namespace aux {
226
219
// all matched sockets are ordered before unmatched sockets
227
220
// matched endpoints are removed from the vector
228
221
// returns an iterator to the first unmatched socket
229
- TORRENT_EXTRA_EXPORT std::list< listen_socket_t >::iterator
222
+ TORRENT_EXTRA_EXPORT std::vector<std::shared_ptr<aux:: listen_socket_t > >::iterator
230
223
partition_listen_sockets (
231
224
std::vector<listen_endpoint_t >& eps
232
- , std::list< listen_socket_t >& sockets);
225
+ , std::vector<std::shared_ptr<aux:: listen_socket_t > >& sockets);
233
226
234
227
// expand [::] to all IPv6 interfaces for BEP 45 compliance
235
228
TORRENT_EXTRA_EXPORT void expand_unspecified_address (
@@ -595,7 +588,7 @@ namespace aux {
595
588
{
596
589
for (auto & s : m_listen_sockets)
597
590
{
598
- f (&s );
591
+ f (s. get () );
599
592
}
600
593
}
601
594
@@ -623,7 +616,7 @@ namespace aux {
623
616
{
624
617
for (auto const & s : m_listen_sockets)
625
618
{
626
- if (s. udp_sock ) return s. udp_external_port ;
619
+ if (s-> udp_sock ) return s-> udp_external_port ;
627
620
}
628
621
return -1 ;
629
622
}
@@ -948,7 +941,7 @@ namespace aux {
948
941
949
942
// since we might be listening on multiple interfaces
950
943
// we might need more than one listen socket
951
- std::list< listen_socket_t > m_listen_sockets;
944
+ std::vector<std::shared_ptr< listen_socket_t > > m_listen_sockets;
952
945
953
946
outgoing_sockets m_outgoing_sockets;
954
947
@@ -971,7 +964,7 @@ namespace aux {
971
964
open_ssl_socket = 0x10
972
965
};
973
966
974
- listen_socket_impl setup_listener (std::string const & device
967
+ std::shared_ptr< listen_socket_t > setup_listener (std::string const & device
975
968
, tcp::endpoint bind_ep, int flags, error_code& ec);
976
969
977
970
#ifndef TORRENT_DISABLE_DHT
0 commit comments