template<typename PhysicalSocketServerT, typename ConfigT, template< typename PhysicalSocketServer > typename SocketConnectionT>
class core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >
Sequence diagram showing how a connect to a peer is performed.
Definition at line 67 of file SocketAcceptor.h.
template<typename PhysicalSocketServer , typename
Config , template< typename PhysicalSocketServerT > typename SocketConnection>
Implements core::eventreceiver::AcceptEventReceiver.
Definition at line 242 of file SocketAcceptor.hpp.
242 {
243 int acceptsPerTick =
config->getAcceptsPerTick();
244
245 do {
248 if (connectedPhysicalSocket.isValid()) {
249 LOG(DEBUG) <<
"[" << connectedPhysicalSocket.getFd() <<
" ]" <<
config->getInstanceName() <<
": accept success: '"
250 << connectedPhysicalSocket.getBindAddress().toString() << "'";
251
254 std::move(connectedPhysicalSocket),
257 getLocalSocketAddress<SocketAddress>(connectedPhysicalSocket,
config),
258 getRemoteSocketAddress<SocketAddress>(connectedPhysicalSocket,
config),
260 config->getWriteTimeout(),
261 config->getReadBlockSize(),
262 config->getWriteBlockSize(),
263 config->getTerminateTimeout());
264
267 } else if (errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) {
269 << "'";
270 }
271 } while (--acceptsPerTick > 0);
272 }
SocketConnectionT< PhysicalServerSocket > SocketConnection
PhysicalSocketServerT PhysicalServerSocket
SocketAddress localAddress
PhysicalServerSocket physicalServerSocket
References core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::config, core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::localAddress, core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::onConnect, core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::onConnected, core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::onDisconnect, and core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::physicalServerSocket.
template<typename PhysicalSocketServer , typename
Config , template< typename PhysicalSocketServerT > typename SocketConnection>
Reimplemented in core::socket::stream::tls::SocketAcceptor< PhysicalSocketServerT, ConfigT >.
Definition at line 151 of file SocketAcceptor.hpp.
151 {
152 if (!
config->getDisabled()) {
153 try {
154 LOG(
TRACE) <<
config->getInstanceName() <<
" Starting";
155
157
159
161 switch (errno) {
162 case EMFILE:
163 case ENFILE:
164 case ENOBUFS:
165 case ENOMEM:
166 PLOG(DEBUG) <<
config->getInstanceName() <<
" open: '" <<
localAddress.toString() <<
"'";
167
168 state = core::socket::STATE_ERROR;
169 break;
170 default:
171 PLOG(DEBUG) <<
config->getInstanceName() <<
" open: '" <<
localAddress.toString() <<
"'";
172
173 state = core::socket::STATE_FATAL;
174 break;
175 }
177 switch (errno) {
178 case EADDRINUSE:
179 PLOG(DEBUG) <<
config->getInstanceName() <<
" bind: '" <<
localAddress.toString() <<
"'";
180
181 state = core::socket::STATE_ERROR;
182 break;
183 default:
184 PLOG(DEBUG) <<
config->getInstanceName() <<
" bind: '" <<
localAddress.toString() <<
"'";
185
186 state = core::socket::STATE_FATAL;
187 break;
188 }
190 switch (errno) {
191 case EADDRINUSE:
192 PLOG(DEBUG) <<
config->getInstanceName() <<
" listen: '" <<
localAddress.toString() <<
"'";
193
194 state = core::socket::STATE_ERROR;
195 break;
196 default:
197 PLOG(DEBUG) <<
config->getInstanceName() <<
" listen: '" <<
localAddress.toString() <<
"'";
198
199 state = core::socket::STATE_FATAL;
200 break;
201 }
202 } else {
204 LOG(DEBUG) <<
config->getInstanceName() <<
" enabled: '" <<
localAddress.toString() <<
"' success";
205 } else {
206 LOG(DEBUG) <<
config->getInstanceName() <<
" enabled: '" <<
localAddress.toString() <<
"' failed";
207
208 state = core::socket::STATE(core::socket::STATE_FATAL, ECANCELED, "SocketAcceptor not enabled");
209 }
210 }
211
215
216 LOG(DEBUG) <<
config->getInstanceName() <<
" using next SocketAddress: '"
217 <<
config->Local::getSocketAddress().toString() <<
"'";
218
220 } else {
221 onStatus(currentLocalAddress, state);
222 }
223 } catch (const typename SocketAddress::BadSocketAddress& badSocketAddress) {
224 LOG(DEBUG) <<
config->getInstanceName() <<
" " << badSocketAddress.what();
225
226 onStatus({}, core::socket::STATE(badSocketAddress.getState(), badSocketAddress.getErrnum(), badSocketAddress.what()));
227 }
228 } else {
229 LOG(DEBUG) <<
config->getInstanceName() <<
" disabled";
230
231 onStatus({}, core::socket::STATE_DISABLED);
232 }
233
236 } else {
238 }
239 }
void setTimeout(const utils::Timeval &timeout)
static constexpr int NO_RETRY
virtual void useNextSocketAddress()=0
typename PhysicalServerSocket::SocketAddress SocketAddress
References core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::config, core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::destruct(), core::DescriptorEventReceiver::enable(), core::DescriptorEventReceiver::isEnabled(), core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::localAddress, core::socket::State::NO_RETRY, core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::onStatus, core::socket::State::operator|(), core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::physicalServerSocket, core::DescriptorEventReceiver::setTimeout(), and core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::useNextSocketAddress().
Referenced by core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::SocketAcceptor(), and core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::SocketAcceptor().