diff options
| author | Garrett D'Amore <garrett@damore.org> | 2017-07-07 18:17:51 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2017-07-07 18:17:51 -0700 |
| commit | 021d09af1375834fe9aaca916e60dcd2ad3be845 (patch) | |
| tree | e3a4c8d2e0eddd69b79308b67922725901752ee9 /src/platform/windows/win_net.c | |
| parent | c6df64d90ff9799b9f5970c4897e2b9a55e2ce69 (diff) | |
| download | nng-021d09af1375834fe9aaca916e60dcd2ad3be845.tar.gz nng-021d09af1375834fe9aaca916e60dcd2ad3be845.tar.bz2 nng-021d09af1375834fe9aaca916e60dcd2ad3be845.zip | |
Start of progress on Windows. Name resolution and IOCP work begins.
Diffstat (limited to 'src/platform/windows/win_net.c')
| -rw-r--r-- | src/platform/windows/win_net.c | 113 |
1 files changed, 111 insertions, 2 deletions
diff --git a/src/platform/windows/win_net.c b/src/platform/windows/win_net.c index 678ccfb9..2a77d97f 100644 --- a/src/platform/windows/win_net.c +++ b/src/platform/windows/win_net.c @@ -13,6 +13,31 @@ #include <stdio.h> +static LPFN_CONNECTEX nni_win_connectex; +static LPFN_ACCEPTEX nni_win_acceptex; + + +struct nni_plat_tcp_pipe { + SOCKET s; + nni_win_event recv_evt; + nni_win_event send_evt; + WSAOVERLAPPED recv_olpd; + WSAOVERLAPPED send_olpd; +}; + + +struct nni_plat_tcp_ep { + SOCKET s; + nni_win_event evt; + WSAOVERLAPPED olpd; + + // We have to lookup some function pointers using ioctls. Winsock, + // gotta love it. + LPFN_CONNECTEX connectex; + LPFN_ACCEPTEX acceptex; +}; + + // Windows has infinite numbers of error codes it seems. static struct { int wsa_err; @@ -197,7 +222,88 @@ nni_plat_lookup_host(const char *host, nni_sockaddr *addr, int flags) int -nni_plat_tcp_send(nni_plat_tcpsock *s, nni_iov *iovs, int cnt) +nni_plat_tcp_ep_init(nni_plat_tcp_ep **epp, const char *url, int mode) +{ + nni_plat_tcp_ep *ep; + + if ((ep = NNI_ALLOC_STRUCT(ep)) == NULL) { + return (NNG_ENOMEM); + } + ZeroMemory(ep, sizeof (*ep)); + ep->s = INVALID_SOCKET; + + // XXX: no need to create event? + ep->olpd.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); + if (ep->olpd.hEvent == INVALID_HANDLE_VALUE) { + return (nni_win_error(GetLastError())); + } + + // XXX: save URL, do lookups? etc. etc. + + *epp = ep; + return (NNG_ENOTSUP); +} + + +void +nni_plat_tcp_ep_fini(nni_plat_tcp_ep *ep) +{ +} + + +void +nni_plat_tcp_ep_close(nni_plat_tcp_ep *ep) +{ +} + + +extern int +nni_plat_tcp_ep_listen(nni_plat_tcp_ep *ep) +{ + return (NNG_ENOTSUP); +} + + +extern void +nni_plat_tcp_ep_accept(nni_plat_tcp_ep *ep, nni_aio *aio) +{ +} + + +extern void +nni_plat_tcp_ep_connect(nni_plat_tcp_ep *ep, nni_aio *aio) +{ +} + + +void +nni_plat_tcp_pipe_send(nni_plat_tcp_pipe *p, nni_aio *aio) +{ +} + + +void +nni_plat_tcp_pipe_recv(nni_plat_tcp_pipe *p, nni_aio *aio) +{ +} + + +void +nni_plat_tcp_pipe_close(nni_plat_tcp_pipe *p) +{ +} + + +void +nni_plat_tcp_pipe_fini(nni_plat_tcp_pipe *p) +{ +} + + +#if 0 + +int +nni_plat_tcp_send_old(nni_plat_tcpsock *s, nni_iov *iovs, int cnt) { WSABUF iov[4]; // We never have more than 3 at present int i; @@ -253,7 +359,7 @@ nni_plat_tcp_send(nni_plat_tcpsock *s, nni_iov *iovs, int cnt) int -nni_plat_tcp_recv(nni_plat_tcpsock *s, nni_iov *iovs, int cnt) +nni_plat_tcp_recv_old(nni_plat_tcpsock *s, nni_iov *iovs, int cnt) { WSABUF iov[4]; // We never have more than 3 at present int i; @@ -572,6 +678,9 @@ nni_plat_tcp_accept(nni_plat_tcpsock *s, nni_plat_tcpsock *server) } +#endif + + #else // Suppress empty symbols warnings in ranlib. |
