diff options
author | 2015-02-04 01:31:14 +0100 | |
---|---|---|
committer | 2015-02-04 02:13:04 +0100 | |
commit | 21f627ad0adeb41e49112ff071c40e5609f93736 (patch) | |
tree | 5c75e521d4943e556c9a45814e352ae2515fe6c0 /src/core/iomgr/socket_windows.h | |
parent | 8c0596edcaf00680eea55455471cba84ccf8061e (diff) |
First draft of the win32 implementation of iomgr.
Caveats:
-) The win32 pollset isn't threadsafe (yet).
-) Only client code is implemented.
-) Only very simple code has been tested with it yet.
Diffstat (limited to 'src/core/iomgr/socket_windows.h')
-rw-r--r-- | src/core/iomgr/socket_windows.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/core/iomgr/socket_windows.h b/src/core/iomgr/socket_windows.h new file mode 100644 index 0000000000..ca85ea54cb --- /dev/null +++ b/src/core/iomgr/socket_windows.h @@ -0,0 +1,73 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef __GRPC_INTERNAL_IOMGR_HANDLE_WINDOWS_H__ +#define __GRPC_INTERNAL_IOMGR_HANDLE_WINDOWS_H__ + +#include <windows.h> + +#include <grpc/support/sync.h> +#include <grpc/support/atm.h> + +typedef struct grpc_winsocket_callback_info { + /* I hate Microsoft so much. This is supposed to be a WSAOVERLAPPED, + * but in order to get that definition, we need to include ws2tcpip.h, + * which needs to be included from the top, otherwise it'll clash with + * a previous inclusion of windows.h that in turns includes winsock.h. + * If anyone knows a way to do it properly, feel free to send a patch. + */ + OVERLAPPED overlapped; + void(*cb)(void *opaque, int success); + void *opaque; + int has_pending_iocp; + DWORD bytes_transfered; + int wsa_error; +} grpc_winsocket_callback_info; + +typedef struct grpc_winsocket { + SOCKET socket; + + grpc_winsocket_callback_info write_info; + grpc_winsocket_callback_info read_info; + + gpr_mu state_mu; +} grpc_winsocket; + +/* Create a wrapped windows handle. +This takes ownership of closing it. */ +grpc_winsocket *grpc_winsocket_create(SOCKET socket); + +void grpc_winsocket_shutdown(grpc_winsocket *socket); +void grpc_winsocket_orphan(grpc_winsocket *socket); + +#endif /* __GRPC_INTERNAL_IOMGR_FD_POSIX_H_ */ |