File tree 1 file changed +16
-5
lines changed
1 file changed +16
-5
lines changed Original file line number Diff line number Diff line change @@ -277,16 +277,27 @@ int shard_connection::connect(struct connect_info* addr) {
277
277
// call connect
278
278
m_connection_state = conn_in_progress;
279
279
280
- if (bufferevent_socket_connect (m_bev,
281
- m_unix_sockaddr ? (struct sockaddr *) m_unix_sockaddr : addr->ci_addr ,
282
- m_unix_sockaddr ? sizeof (struct sockaddr_un ) : addr->ci_addrlen ) == -1 ) {
280
+ while (true ) {
281
+ if (bufferevent_socket_connect (m_bev,
282
+ m_unix_sockaddr ? (struct sockaddr *) m_unix_sockaddr : addr->ci_addr ,
283
+ m_unix_sockaddr ? sizeof (struct sockaddr_un ) : addr->ci_addrlen ) == 0 ) {
284
+ return 0 ;
285
+ }
286
+
287
+ if (errno == EINPROGRESS) {
288
+ return 0 ;
289
+ }
290
+
291
+ if (errno == EAGAIN || errno == EWOULDBLOCK) {
292
+ // resource temporarily unavailable; try again
293
+ continue ;
294
+ }
295
+
283
296
disconnect ();
284
297
285
298
benchmark_error_log (" connect failed, error = %s\n " , strerror (errno));
286
299
return -1 ;
287
300
}
288
-
289
- return 0 ;
290
301
}
291
302
292
303
void shard_connection::disconnect () {
You can’t perform that action at this time.
0 commit comments