From 374f93a18edca2e0656c337a5b54927169ec31fa Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Wed, 29 Mar 2017 13:07:35 -0700 Subject: TCP (POSIX) async send/recv working. Other changes. Transport-level pipe initialization is now sepearate and explicit. The POSIX send/recv logic still uses threads under the hood, but makes use of the AIO framework for send/recv. This is a key stepping stone towards enabling poll() or similar async I/O approaches. --- src/core/platform.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/core/platform.h') diff --git a/src/core/platform.h b/src/core/platform.h index b1e824e2..1644973c 100644 --- a/src/core/platform.h +++ b/src/core/platform.h @@ -174,7 +174,7 @@ extern int nni_plat_lookup_host(const char *, nni_sockaddr *, int); // nni_plat_tcp_init initializes the socket, for example it can // set underlying file descriptors to -1, etc. -extern int nni_plat_tcp_init(nni_plat_tcpsock *); +extern int nni_plat_tcp_init(nni_plat_tcpsock **); // nni_plat_tcp_fini just closes a TCP socket, and releases any related // resources. @@ -203,14 +203,17 @@ extern int nni_plat_tcp_accept(nni_plat_tcpsock *, nni_plat_tcpsock *); extern int nni_plat_tcp_connect(nni_plat_tcpsock *, const nni_sockaddr *, const nni_sockaddr *); -// nni_plat_tcp_send sends data to the remote side. The platform is -// responsible for attempting to send all of the data. The iov count -// will never be larger than 4. THe platform may modify the iovs. +// nni_plat_tcp_aio_send sends the data to the remote side asynchronously. +// The data to send is stored in the a_iov field of the aio, and the array +// of iovs will never be larger than 4. The platform may modify the iovs, +// or the iov list. +extern int nni_plat_tcp_aio_send(nni_plat_tcpsock *, nni_aio *); extern int nni_plat_tcp_send(nni_plat_tcpsock *, nni_iov *, int); // nni_plat_tcp_recv recvs data into the buffers provided by the // iovs. The implementation does not return until the iovs are completely // full, or an error condition occurs. +extern int nni_plat_tcp_aio_recv(nni_plat_tcpsock *, nni_aio *); extern int nni_plat_tcp_recv(nni_plat_tcpsock *, nni_iov *, int); // nni_plat_ipc_init initializes the socket, for example it can -- cgit v1.2.3-70-g09d2