aboutsummaryrefslogtreecommitdiff
path: root/packages/bun-usockets/src/socket.c
diff options
context:
space:
mode:
authorGravatar dave caruso <me@paperdave.net> 2023-09-07 04:58:44 -0700
committerGravatar GitHub <noreply@github.com> 2023-09-07 04:58:44 -0700
commit57a06745a48093c25d0f4729ccea41a918d6427d (patch)
treeac2568d5c98918d6364d2a9667c164cd3f3b3867 /packages/bun-usockets/src/socket.c
parent4360ec83b4146e15344b304573795f084f86a7c2 (diff)
downloadbun-57a06745a48093c25d0f4729ccea41a918d6427d.tar.gz
bun-57a06745a48093c25d0f4729ccea41a918d6427d.tar.zst
bun-57a06745a48093c25d0f4729ccea41a918d6427d.zip
Progress for Next.js (#4468)
* L * ipc * asdfghjkl * dfghjk * it works! * types * patches for next.js * sdfghj * wsdfgn,./ * this * yolo * okay loser * asdfghjk * add some more APIs * MESS * sdfghjkl * remove native events from streams * stuff * remove lazy(primordials) test * debugging * okay * less fake extensions object * fix `Buffer.toString()` args logic * fix deserialize * make tests work * add test for `Buffer.toString` args * Update server.zig * remove test * update test * Update spawn-streaming-stdin.test.ts * fix linux build * Update fs.test.ts * cli message improvements * dfshaj * Fix fs.watch bug maybe? * remove --------- Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
Diffstat (limited to 'packages/bun-usockets/src/socket.c')
-rw-r--r--packages/bun-usockets/src/socket.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/packages/bun-usockets/src/socket.c b/packages/bun-usockets/src/socket.c
index 61cbb2c0f..5f5a91acb 100644
--- a/packages/bun-usockets/src/socket.c
+++ b/packages/bun-usockets/src/socket.c
@@ -14,6 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+// clang-format off
#include "libusockets.h"
#include "internal/internal.h"
@@ -192,6 +193,45 @@ struct us_socket_t *us_socket_attach(int ssl, LIBUS_SOCKET_DESCRIPTOR client_fd,
return s;
}
+struct us_socket_t *us_socket_pair(struct us_socket_context_t *ctx, int socket_ext_size, LIBUS_SOCKET_DESCRIPTOR* fds) {
+#ifdef LIBUS_USE_LIBUV
+ return 0;
+#endif
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) != 0) {
+ return 0;
+ }
+
+ return us_socket_from_fd(ctx, socket_ext_size, fds[0]);
+}
+
+
+struct us_socket_t *us_socket_from_fd(struct us_socket_context_t *ctx, int socket_ext_size, LIBUS_SOCKET_DESCRIPTOR fd) {
+#ifdef LIBUS_USE_LIBUV
+ return 0;
+#endif
+ struct us_poll_t *p1 = us_create_poll(ctx->loop, 0, sizeof(struct us_socket_t) + socket_ext_size);
+ us_poll_init(p1, fd, POLL_TYPE_SOCKET);
+ us_poll_start(p1, ctx->loop, LIBUS_SOCKET_READABLE | LIBUS_SOCKET_WRITABLE);
+
+ struct us_socket_t *s = (struct us_socket_t *) p1;
+ s->context = ctx;
+ s->timeout = 0;
+ s->long_timeout = 0;
+ s->low_prio_state = 0;
+
+ /* We always use nodelay */
+ bsd_socket_nodelay(fd, 1);
+
+ us_internal_socket_context_link_socket(ctx, s);
+
+ if (ctx->on_open) {
+ ctx->on_open(s, 0, 0, 0);
+ }
+
+ return s;
+}
+
+
/* Not shared with SSL */
void *us_socket_get_native_handle(int ssl, struct us_socket_t *s) {