When zero-timeout, only try first address in connect.

This commit is contained in:
Diego Nehab
2015-12-03 12:56:18 -02:00
parent be67f63f4e
commit 83880dbed7
3 changed files with 12 additions and 9 deletions

View File

@ -423,8 +423,8 @@ const char *inet_tryconnect(p_socket ps, int *family, const char *address,
/* try connecting to remote address */
err = socket_strerror(socket_connect(ps, (SA *) iterator->ai_addr,
(socklen_t) iterator->ai_addrlen, tm));
/* if success, break out of loop */
if (err == NULL) {
/* if success or timeout is zero, break out of loop */
if (err == NULL || timeout_iszero(tm)) {
*family = current_family;
break;
}

View File

@ -417,7 +417,7 @@ static int global_connect(lua_State *L) {
bindhints.ai_family = family;
bindhints.ai_flags = AI_PASSIVE;
if (localaddr) {
err = inet_trybind(&tcp->sock, &tcp->family, localaddr,
err = inet_trybind(&tcp->sock, &tcp->family, localaddr,
localserv, &bindhints);
if (err) {
lua_pushnil(L);
@ -429,7 +429,7 @@ static int global_connect(lua_State *L) {
memset(&connecthints, 0, sizeof(connecthints));
connecthints.ai_socktype = SOCK_STREAM;
/* make sure we try to connect only to the same family */
connecthints.ai_family = tcp->family;
connecthints.ai_family = tcp->family;
err = inet_tryconnect(&tcp->sock, &tcp->family, remoteaddr, remoteserv,
&tcp->tm, &connecthints);
if (err) {