extern char *do_select(SOCKET skt, int startup);
-Socket sk_register(void *sock, Plug plug)
+static Socket sk_tcp_accept(accept_ctx_t ctx, Plug plug)
{
static const struct socket_function_table fn_table = {
sk_tcp_plug,
ret->parent = ret->child = NULL;
ret->addr = NULL;
- ret->s = (SOCKET)sock;
+ ret->s = (SOCKET)ctx.p;
if (ret->s == INVALID_SOCKET) {
err = p_WSAGetLastError();
#endif
int addrlen = sizeof(isa);
SOCKET t; /* socket of connection */
+ accept_ctx_t actx;
memset(&isa, 0, sizeof(isa));
err = 0;
if (err == WSATRY_AGAIN)
break;
}
+
+ actx.p = (void *)t;
+
#ifndef NO_IPV6
if (isa.ss_family == AF_INET &&
s->localhost_only &&
#endif
{
p_closesocket(t); /* dodgy WinSock let nonlocal through */
- } else if (plug_accepting(s->plug, (void*)t)) {
+ } else if (plug_accepting(s->plug, sk_tcp_accept, actx)) {
p_closesocket(t); /* denied or error */
}
}