Skip to content

Commit f818581

Browse files
committed
factored out connect() result handling
1 parent 5a2cbac commit f818581

File tree

2 files changed

+30
-33
lines changed

2 files changed

+30
-33
lines changed

src/core/ev.c

+27-30
Original file line numberDiff line numberDiff line change
@@ -2481,6 +2481,31 @@ typedef struct {
24812481
#endif
24822482
} StateWrite;
24832483

2484+
static JanetAsyncStatus handle_connect(JanetListenerState *s) {
2485+
#ifdef JANET_WINDOWS
2486+
int res = 0;
2487+
int size = sizeof(res);
2488+
int r = getsockopt((SOCKET)s->stream->handle, SOL_SOCKET, SO_ERROR, (char *)&res, &size);
2489+
#else
2490+
int res = 0;
2491+
socklen_t size = sizeof res;
2492+
int r = getsockopt(s->stream->handle, SOL_SOCKET, SO_ERROR, &res, &size);
2493+
#endif
2494+
if (r == 0) {
2495+
if (res == 0) {
2496+
janet_schedule(s->fiber, janet_wrap_abstract(s->stream));
2497+
} else {
2498+
// TODO JSOCKCLOSE(s->sock) but is in net.c;
2499+
janet_cancel(s->fiber, janet_cstringv(strerror(res)));
2500+
}
2501+
return JANET_ASYNC_STATUS_DONE;
2502+
} else {
2503+
// TODO panic? assert?
2504+
return JANET_ASYNC_STATUS_NOT_DONE;
2505+
}
2506+
}
2507+
2508+
24842509
JanetAsyncStatus ev_machine_write(JanetListenerState *s, JanetAsyncEvent event) {
24852510
StateWrite *state = (StateWrite *) s;
24862511
switch (event) {
@@ -2512,21 +2537,7 @@ JanetAsyncStatus ev_machine_write(JanetListenerState *s, JanetAsyncEvent event)
25122537
case JANET_ASYNC_EVENT_USER: {
25132538
#ifdef JANET_NET
25142539
if (state->mode == JANET_ASYNC_WRITEMODE_CONNECT) {
2515-
int res = 0;
2516-
int size = sizeof res;
2517-
int r = getsockopt((SOCKET)s->stream->handle, SOL_SOCKET, SO_ERROR, (char *)&res, &size);
2518-
if (r == 0) {
2519-
if (res == 0) {
2520-
janet_schedule(s->fiber, janet_wrap_abstract(s->stream));
2521-
} else {
2522-
// TODO JSOCKCLOSE(s->sock) but is in net.c;
2523-
janet_cancel(s->fiber, janet_cstringv(strerror(res)));
2524-
}
2525-
return JANET_ASYNC_STATUS_DONE;
2526-
} else {
2527-
// TODO panic? assert?
2528-
return JANET_ASYNC_STATUS_NOT_DONE;
2529-
}
2540+
return handle_connect(s);
25302541
}
25312542
#endif
25322543
/* Begin write */
@@ -2594,21 +2605,7 @@ JanetAsyncStatus ev_machine_write(JanetListenerState *s, JanetAsyncEvent event)
25942605
case JANET_ASYNC_EVENT_WRITE: {
25952606
#ifdef JANET_NET
25962607
if (state->mode == JANET_ASYNC_WRITEMODE_CONNECT) {
2597-
int res = 0;
2598-
socklen_t size = sizeof res;
2599-
int r = getsockopt(s->stream->handle, SOL_SOCKET, SO_ERROR, &res, &size);
2600-
if (r == 0) {
2601-
if (res == 0) {
2602-
janet_schedule(s->fiber, janet_wrap_abstract(s->stream));
2603-
} else {
2604-
// TODO JSOCKCLOSE(s->sock) but is in net.c;
2605-
janet_cancel(s->fiber, janet_cstringv(strerror(res)));
2606-
}
2607-
return JANET_ASYNC_STATUS_DONE;
2608-
} else {
2609-
// TODO panic? assert?
2610-
return JANET_ASYNC_STATUS_NOT_DONE;
2611-
}
2608+
return handle_connect(s);
26122609
}
26132610
#endif
26142611
int32_t start, len;

src/core/net.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -500,16 +500,16 @@ JANET_CORE_FN(cfun_net_connect,
500500

501501
if (status != 0) {
502502
#ifdef JANET_WINDOWS
503-
if(err != WSAEWOULDBLOCK) {
503+
if (err != WSAEWOULDBLOCK) {
504504
#else
505-
if(err != EINPROGRESS) {
505+
if (err != EINPROGRESS) {
506506
#endif
507507
JSOCKCLOSE(sock);
508508
Janet lasterr = janet_ev_lasterr();
509509
janet_panicf("could not connect socket: %V", lasterr);
510510
}
511511
}
512-
512+
513513
/* Handle the connect() result in the event loop*/
514514
janet_ev_connect(stream, MSG_NOSIGNAL);
515515

0 commit comments

Comments
 (0)