Compare commits
2 Commits
1e47b86f42
...
7b6c7de1fa
Author | SHA1 | Date |
---|---|---|
Juhani Krekelä | 7b6c7de1fa | |
Juhani Krekelä | 658b89f5d8 |
|
@ -218,7 +218,7 @@ attempt_connect:
|
|||
#if defined(SOL_SOCKET) && defined(SO_REUSEADDR)
|
||||
EINTRLOOP(rs, setsockopt(s_unix_fd, SOL_SOCKET, SO_REUSEADDR, (void *)&a1, sizeof a1));
|
||||
#endif
|
||||
rs = blocking_connect(s_unix_fd, &s_unix.s, s_unix_l);
|
||||
EINTRLOOP(rs, connect(s_unix_fd, &s_unix.s, s_unix_l));
|
||||
if (rs) {
|
||||
retry:
|
||||
/*debug("connect: %d, %s", errno, strerror(errno));*/
|
||||
|
|
|
@ -672,7 +672,7 @@ static void try_connect(struct connection *c)
|
|||
#if defined(__aarch64__) && defined(__ILP32__)
|
||||
errno = EINPROGRESS; /* arm64 ilp32 bug */
|
||||
#endif
|
||||
rs = connect(s, (struct sockaddr *)(void *)&sa, sizeof sa);
|
||||
EINTRLOOP(rs, connect(s, (struct sockaddr *)(void *)&sa, sizeof sa));
|
||||
#ifdef SUPPORT_IPV6
|
||||
} else if (addr->af == AF_INET6) {
|
||||
struct sockaddr_in6 sa;
|
||||
|
@ -686,14 +686,14 @@ static void try_connect(struct connection *c)
|
|||
#if defined(__aarch64__) && defined(__ILP32__)
|
||||
errno = EINPROGRESS; /* arm64 ilp32 bug */
|
||||
#endif
|
||||
rs = connect(s, (struct sockaddr *)(void *)&sa, sizeof sa);
|
||||
EINTRLOOP(rs, connect(s, (struct sockaddr *)(void *)&sa, sizeof sa));
|
||||
#endif
|
||||
} else {
|
||||
rs = -1;
|
||||
errno = EINVAL;
|
||||
}
|
||||
if (rs) {
|
||||
if (errno != EALREADY && errno != EINPROGRESS && errno != EINTR) {
|
||||
if (errno != EALREADY && errno != EINPROGRESS) {
|
||||
#ifdef BEOS
|
||||
if (errno == EWOULDBLOCK) errno = ETIMEDOUT;
|
||||
#endif
|
||||
|
|
2
dns.c
2
dns.c
|
@ -773,7 +773,7 @@ int ipv6_full_access(void)
|
|||
sin6.sin6_family = AF_INET6;
|
||||
sin6.sin6_port = htons(1024);
|
||||
memcpy(&sin6.sin6_addr.s6_addr, "\052\001\004\060\000\015\000\000\002\314\236\377\376\044\176\032", 16);
|
||||
c = blocking_connect(h, (struct sockaddr *)(void *)&sin6, sizeof sin6);
|
||||
EINTRLOOP(c, connect(h, (struct sockaddr *)(void *)&sin6, sizeof sin6));
|
||||
EINTRLOOP(rs, close(h));
|
||||
if (!c) return 1;
|
||||
#endif
|
||||
|
|
1
links.h
1
links.h
|
@ -1140,7 +1140,6 @@ extern int terminate_loop;
|
|||
int can_write(int fd);
|
||||
int can_read(int fd);
|
||||
int can_read_timeout(int fd, int sec);
|
||||
int blocking_connect(int fd, struct sockaddr *addr, socklen_t addrlen);
|
||||
int close_std_handle(int);
|
||||
void restore_std_handle(int, int);
|
||||
unsigned long select_info(int);
|
||||
|
|
16
select.c
16
select.c
|
@ -125,22 +125,6 @@ int can_read(int fd)
|
|||
}
|
||||
|
||||
|
||||
// PATCH: Handle connect not being restartable
|
||||
int blocking_connect(int fd, struct sockaddr *addr, socklen_t addrlen)
|
||||
{
|
||||
int connect_error;
|
||||
socklen_t len = sizeof(connect_error);
|
||||
|
||||
if (!connect(fd, addr, addrlen)) return 0;
|
||||
if (errno != EINTR) return -1;
|
||||
|
||||
can_do_io(fd, 1, -1); // Wait until connected/failed
|
||||
getsockopt(fd, SOL_SOCKET, SO_ERROR, &connect_error, &len);
|
||||
errno = connect_error;
|
||||
return !connect_error ? 0 : -1;
|
||||
}
|
||||
|
||||
|
||||
int close_std_handle(int std)
|
||||
{
|
||||
#ifndef DOS
|
||||
|
|
Loading…
Reference in New Issue