121 {
123 try {
124 LOG(
TRACE) <<
config->getInstanceName() <<
" Starting";
125
128
129 try {
131
133 switch (errno) {
134 case EMFILE:
135 case ENFILE:
136 case ENOBUFS:
137 case ENOMEM:
138 PLOG(DEBUG) <<
config->getInstanceName() <<
" open: '" << localAddress.toString() <<
"'";
139
140 state = core::socket::STATE_ERROR;
141 break;
142 default:
143 PLOG(DEBUG) <<
config->getInstanceName() <<
" open: '" << localAddress.toString() <<
"'";
144
145 state = core::socket::STATE_FATAL;
146 break;
147 }
148
151 switch (errno) {
152 case EADDRINUSE:
153 PLOG(DEBUG) <<
config->getInstanceName() <<
" bind: '" << localAddress.toString() <<
"'";
154
155 state = core::socket::STATE_ERROR;
156 break;
157 default:
158 PLOG(DEBUG) <<
config->getInstanceName() <<
" bind: '" << localAddress.toString() <<
"'";
159
160 state = core::socket::STATE_FATAL;
161 break;
162 }
163
166 switch (errno) {
167 case EADDRINUSE:
168 case EADDRNOTAVAIL:
169 case ECONNREFUSED:
170 case ENETUNREACH:
171 case ENOENT:
172 case EHOSTDOWN:
173 PLOG(DEBUG) <<
config->getInstanceName() <<
" connect: '" <<
remoteAddress.toString() <<
"'";
174
175 state = core::socket::STATE_ERROR;
176 break;
177 default:
178 PLOG(DEBUG) <<
config->getInstanceName() <<
" connect: '" <<
remoteAddress.toString() <<
"'";
179
180 state = core::socket::STATE_FATAL;
181 break;
182 }
183
186
187 LOG(DEBUG) <<
config->getInstanceName() <<
" using next SocketAddress: '"
188 <<
config->Remote::getSocketAddress().toString() <<
"'";
189
191 } else {
193 }
194 } else if (PhysicalClientSocket::connectInProgress(errno)) {
196 LOG(DEBUG) <<
config->getInstanceName() <<
" connect in progress: '" <<
remoteAddress.toString() <<
"'";
197 } else {
198 LOG(DEBUG) <<
config->getInstanceName() <<
" not enabled: '" <<
remoteAddress.toString() <<
"'";
199
200 state = core::socket::STATE(core::socket::STATE_FATAL, ECANCELED, "SocketConnector not enabled");
201
203 }
204 } else {
207
209
218 config->getWriteTimeout(),
219 config->getReadBlockSize(),
220 config->getWriteBlockSize(),
221 config->getTerminateTimeout());
222
225 }
226 } catch (const typename SocketAddress::BadSocketAddress& badSocketAddress) {
227 LOG(DEBUG) <<
config->getInstanceName() <<
" " << badSocketAddress.what();
228
229 onStatus({}, core::socket::STATE(badSocketAddress.getState(), badSocketAddress.getErrnum(), badSocketAddress.what()));
230 }
231 } catch (const typename SocketAddress::BadSocketAddress& badSocketAddress) {
232 LOG(DEBUG) <<
config->getInstanceName() <<
" " << badSocketAddress.what();
233
234 onStatus({}, core::socket::STATE(badSocketAddress.getState(), badSocketAddress.getErrnum(), badSocketAddress.what()));
235 }
236 } else {
237 LOG(DEBUG) <<
config->getInstanceName() <<
" disabled";
238
239 onStatus({}, core::socket::STATE_DISABLED);
240 }
241
244 } else {
246 }
247 }
void setTimeout(const utils::Timeval &timeout)
typename PhysicalClientSocket::SocketAddress SocketAddress