1 mike 1.1 /*
2 **==============================================================================
3 **
4 ** Open Management Infrastructure (OMI)
5 **
6 ** Copyright (c) Microsoft Corporation
7 **
8 ** Licensed under the Apache License, Version 2.0 (the "License"); you may not
9 ** use this file except in compliance with the License. You may obtain a copy
10 ** of the License at
11 **
12 ** http://www.apache.org/licenses/LICENSE-2.0
13 **
14 ** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 ** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
16 ** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
17 ** MERCHANTABLITY OR NON-INFRINGEMENT.
18 **
19 ** See the Apache 2 License for the specific language governing permissions
20 ** and limitations under the License.
21 **
22 mike 1.1 **==============================================================================
23 */
24
25 #ifndef _omi_sock_h
26 #define _omi_sock_h
27
28 #include "config.h"
29 #include <string.h>
30 #include <common.h>
31 #include "addr.h"
32
33 //# if defined(CONFIG_POSIX)
34 //// readv/writev headers
35 //# include <sys/uio.h>
36 //# endif
37
38 BEGIN_EXTERNC
39
40 #if defined(CONFIG_OS_WINDOWS)
41 # if defined(_WIN64)
42 typedef MI_Uint64 Sock;
43 mike 1.1 # else
44 typedef MI_Uint32 Sock;
45 # endif
46 #else
47 typedef int Sock;
48 #endif
49
50 #define INVALID_SOCK ((Sock)-1)
51
52 typedef struct _IOVec
53 {
54 void *ptr; /* Pointer to data. */
55 size_t len; /* Length of data. */
56 }
57 IOVec;
58
59 MI_Result Sock_Start();
60
61 void Sock_Stop();
62
63 MI_Result Sock_Create(
64 mike 1.1 Sock* sock);
65
66 MI_Result Sock_Close(
67 Sock self);
68
69 MI_Result Sock_Bind(
70 Sock self,
71 const Addr* addr);
72
73 MI_Result Sock_Listen(
74 Sock self);
75
76 MI_Result Sock_Accept(
77 Sock self,
78 Sock* sock,
79 Addr* addr);
80
81 MI_Result Sock_Connect(
82 Sock self,
83 const Addr* addr);
84
85 mike 1.1 MI_Result Sock_ReuseAddr(
86 Sock self,
87 MI_Boolean flag);
88
89 MI_Result Sock_SetBlocking(
90 Sock self,
91 MI_Boolean flag);
92
93 MI_Result Sock_SetNoDelay(
94 Sock self,
95 MI_Boolean flag);
96
97 MI_Result Sock_SetCloseOnExec(
98 Sock self,
99 MI_Boolean closeOnExec);
100
101 MI_Result Sock_Read(
102 Sock self,
103 void* data,
104 size_t size,
105 size_t* sizeRead);
106 mike 1.1
107 MI_Result Sock_ReadV(
108 Sock self,
109 const IOVec* iov,
110 size_t iovcnt,
111 size_t* sizeRead);
112
113 MI_Result Sock_Write(
114 Sock self,
115 const void* data,
116 size_t size,
117 size_t* sizeWritten);
118
119 MI_Result Sock_WriteV(
120 Sock self,
121 const IOVec* iov,
122 size_t iovcnt,
123 size_t* sizeWritten);
124
125 MI_Result Sock_CreateListener(
126 Sock* sock,
127 mike 1.1 const Addr* addr);
128
129 /* AF_LOCAL family */
130 MI_Result Sock_CreateLocalListener(
131 Sock* sock,
132 const char* addr);
133
134 /* AF_LOCAL, non-blocking, close-on-exec, connect */
135 MI_Result Sock_CreateLocalConnector(
136 Sock* sock,
137 const char* addr);
138
139 MI_INLINE int Sock_GetLastError()
140 {
141 #if defined(CONFIG_OS_WINDOWS)
142 return (int)GetLastError();
143 #else
144 return (int)errno;
145 #endif
146 }
147
148 mike 1.1 END_EXTERNC
149
150 #endif /* _omi_sock_h */
|