151 {
152 if (!
config->getDisabled()) {
153 try {
154 LOG(
TRACE) <<
config->getInstanceName() <<
" Starting";
155
158
159 try {
161
163 switch (errno) {
164 case EMFILE:
165 case ENFILE:
166 case ENOBUFS:
167 case ENOMEM:
168 PLOG(DEBUG) <<
config->getInstanceName() <<
" open: '" << localAddress.toString() <<
"'";
169
170 state = core::socket::STATE_ERROR;
171 break;
172 default:
173 PLOG(DEBUG) <<
config->getInstanceName() <<
" open: '" << localAddress.toString() <<
"'";
174
175 state = core::socket::STATE_FATAL;
176 break;
177 }
178
181 switch (errno) {
182 case EADDRINUSE:
183 PLOG(DEBUG) <<
config->getInstanceName() <<
" bind: '" << localAddress.toString() <<
"'";
184
185 state = core::socket::STATE_ERROR;
186 break;
187 default:
188 PLOG(DEBUG) <<
config->getInstanceName() <<
" bind: '" << localAddress.toString() <<
"'";
189
190 state = core::socket::STATE_FATAL;
191 break;
192 }
193
196 switch (errno) {
197 case EADDRINUSE:
198 case EADDRNOTAVAIL:
199 case ECONNREFUSED:
200 case ENETUNREACH:
201 case ENOENT:
202 case EHOSTDOWN:
203 PLOG(DEBUG) <<
config->getInstanceName() <<
" connect: '" <<
remoteAddress.toString() <<
"'";
204
205 state = core::socket::STATE_ERROR;
206 break;
207 default:
208 PLOG(DEBUG) <<
config->getInstanceName() <<
" connect: '" <<
remoteAddress.toString() <<
"'";
209
210 state = core::socket::STATE_FATAL;
211 break;
212 }
213
217
218 LOG(DEBUG) <<
config->getInstanceName() <<
" using next SocketAddress: '"
219 <<
config->Remote::getSocketAddress().toString() <<
"'";
220
222 } else {
223 onStatus(currentRemoteAddress, state);
224 }
225 } else if (PhysicalClientSocket::connectInProgress(errno)) {
227 LOG(DEBUG) <<
config->getInstanceName() <<
" connect in progress: '" <<
remoteAddress.toString() <<
"'";
228 } else {
229 LOG(DEBUG) <<
config->getInstanceName() <<
" not enabled: '" <<
remoteAddress.toString() <<
"'";
230
231 state = core::socket::STATE(core::socket::STATE_FATAL, ECANCELED, "SocketConnector not enabled");
232
234 }
235 } else {
238
240
249 config->getWriteTimeout(),
250 config->getReadBlockSize(),
251 config->getWriteBlockSize(),
252 config->getTerminateTimeout());
253
256 }
257 } catch (const typename SocketAddress::BadSocketAddress& badSocketAddress) {
258 LOG(DEBUG) <<
config->getInstanceName() <<
" " << badSocketAddress.what();
259
260 onStatus({}, core::socket::STATE(badSocketAddress.getState(), badSocketAddress.getErrnum(), badSocketAddress.what()));
261 }
262 } catch (const typename SocketAddress::BadSocketAddress& badSocketAddress) {
263 LOG(DEBUG) <<
config->getInstanceName() <<
" " << badSocketAddress.what();
264
265 onStatus({}, core::socket::STATE(badSocketAddress.getState(), badSocketAddress.getErrnum(), badSocketAddress.what()));
266 }
267 } else {
268 LOG(DEBUG) <<
config->getInstanceName() <<
" disabled";
269
270 onStatus({}, core::socket::STATE_DISABLED);
271 }
272
275 } else {
277 }
278 }
void setTimeout(const utils::Timeval &timeout)