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 @@ -288,16 +288,27 @@ int shard_connection::connect(struct connect_info* addr) {
288
288
// call connect
289
289
m_connection_state = conn_in_progress;
290
290
291
- if (bufferevent_socket_connect (m_bev,
292
- m_unix_sockaddr ? (struct sockaddr *) m_unix_sockaddr : addr->ci_addr ,
293
- m_unix_sockaddr ? sizeof (struct sockaddr_un ) : addr->ci_addrlen ) == -1 ) {
291
+ while (true ) {
292
+ if (bufferevent_socket_connect (m_bev,
293
+ m_unix_sockaddr ? (struct sockaddr *) m_unix_sockaddr : addr->ci_addr ,
294
+ m_unix_sockaddr ? sizeof (struct sockaddr_un ) : addr->ci_addrlen ) == 0 ) {
295
+ return 0 ;
296
+ }
297
+
298
+ if (errno == EINPROGRESS) {
299
+ return 0 ;
300
+ }
301
+
302
+ if (errno == EAGAIN || errno == EWOULDBLOCK) {
303
+ // resource temporarily unavailable; try again
304
+ continue ;
305
+ }
306
+
294
307
disconnect ();
295
308
296
309
benchmark_error_log (" connect failed, error = %s\n " , strerror (errno));
297
310
return -1 ;
298
311
}
299
-
300
- return 0 ;
301
312
}
302
313
303
314
void shard_connection::disconnect () {
You can’t perform that action at this time.
0 commit comments