aboutsummaryrefslogtreecommitdiff
path: root/packages/bun-usockets/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/bun-usockets/src')
-rw-r--r--packages/bun-usockets/src/bsd.c51
1 files changed, 42 insertions, 9 deletions
diff --git a/packages/bun-usockets/src/bsd.c b/packages/bun-usockets/src/bsd.c
index 7683acd7d..fc501e4d9 100644
--- a/packages/bun-usockets/src/bsd.c
+++ b/packages/bun-usockets/src/bsd.c
@@ -665,9 +665,39 @@ int bsd_udp_packet_buffer_ecn(void *msgvec, int index) {
return 0; // no ecn defaults to 0
}
-static int bsd_do_connect(struct addrinfo *result, int fd)
+static int bsd_do_connect_raw(struct addrinfo *rp, int fd)
{
- return connect(fd, result->ai_addr, (socklen_t) result->ai_addrlen);
+ do {
+ if (connect(fd, rp->ai_addr, rp->ai_addrlen) == 0 || errno == EINPROGRESS) {
+ return 0;
+ }
+ } while (errno == EINTR);
+
+ return LIBUS_SOCKET_ERROR;
+}
+
+static int bsd_do_connect(struct addrinfo *rp, int *fd)
+{
+ while (rp != NULL) {
+ if (bsd_do_connect_raw(rp, *fd) == 0) {
+ return 0;
+ }
+
+ rp = rp->ai_next;
+ bsd_close_socket(*fd);
+
+ if (rp == NULL) {
+ return LIBUS_SOCKET_ERROR;
+ }
+
+ int resultFd = bsd_create_socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
+ if (resultFd < 0) {
+ return LIBUS_SOCKET_ERROR;
+ }
+ *fd = resultFd;
+ }
+
+ return LIBUS_SOCKET_ERROR;
}
LIBUS_SOCKET_DESCRIPTOR bsd_create_connect_socket(const char *host, int port, const char *source_host, int options) {
@@ -700,18 +730,21 @@ LIBUS_SOCKET_DESCRIPTOR bsd_create_connect_socket(const char *host, int port, co
return LIBUS_SOCKET_ERROR;
}
}
- }
-
- do {
- if (bsd_do_connect(result, fd) != 0 && errno != EINPROGRESS) {
+
+ if (bsd_do_connect_raw(result, fd) != 0) {
bsd_close_socket(fd);
freeaddrinfo(result);
return LIBUS_SOCKET_ERROR;
}
- } while (errno == EINTR);
-
+ } else {
+ if (bsd_do_connect(result, &fd) != 0) {
+ freeaddrinfo(result);
+ return LIBUS_SOCKET_ERROR;
+ }
+ }
+
+
freeaddrinfo(result);
-
return fd;
}
dated tests * ran prettier again... 2023-08-31get name if not provided in `FormData.append` (#4434)Gravatar Dylan Conway 4-5/+45 * get file name from blob if not provided * add test * another test * format 2023-08-31Fix vscode debug terminalGravatar Ashcon Partovi 1-21/+0