Compare commits

...

2 Commits

Author SHA1 Message Date
Juhani Krekelä 7b6c7de1fa fixup! Sortix patches 2022-02-16 20:53:26 +02:00
Juhani Krekelä 658b89f5d8 fixup! Sortix patches 2022-02-16 19:41:29 +02:00
5 changed files with 5 additions and 22 deletions

View File

@ -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));*/

View File

@ -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
View File

@ -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

View File

@ -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);

View File

@ -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