xt-sdk 文档
v1.0.3
xt-sdk 嵌入式 SDK API 参考
Toggle main menu visibility
载入中...
搜索中...
未找到
xt_socket.h
浏览该文件的文档.
1
112
113
#ifndef __XT_SOCKET_H__
114
#define __XT_SOCKET_H__
115
116
/* ==================== [Includes] ========================================== */
117
118
#if defined(XT_SDK_PLATFORM_WINDOWS)
119
120
#include <winsock2.h>
121
#include <ws2tcpip.h>
122
123
#elif defined(XT_SDK_PLATFORM_LINUX)
124
125
#include <sys/socket.h>
126
#include <netinet/in.h>
127
#include <netinet/tcp.h>
128
#include <arpa/inet.h>
129
#include <netdb.h>
130
#include <sys/time.h>
131
#include <unistd.h>
132
#include <fcntl.h>
133
134
#else
135
136
#include "lwip/sockets.h"
137
#include "lwip/netdb.h"
138
139
#endif
140
141
#include <stdint.h>
142
#include "
xt_utils.h
"
143
144
#ifdef __cplusplus
145
extern
"C"
{
146
#endif
147
154
155
/* ==================== [Defines] =========================================== */
156
157
#if defined(XT_SDK_PLATFORM_WINDOWS)
158
159
#ifndef SHUT_RD
160
#define SHUT_RD SD_RECEIVE
161
#endif
162
#ifndef SHUT_WR
163
#define SHUT_WR SD_SEND
164
#endif
165
#ifndef SHUT_RDWR
166
#define SHUT_RDWR SD_BOTH
167
#endif
168
169
typedef
SOCKET
xt_socket_t
;
170
#define XT_SOCKET_INVALID INVALID_SOCKET
171
#define XT_SOCKET_ERROR SOCKET_ERROR
172
173
#elif defined(XT_SDK_PLATFORM_LINUX)
174
175
#ifndef closesocket
176
#define closesocket(s) close(s)
177
#endif
178
179
typedef
int
xt_socket_t
;
180
#define XT_SOCKET_INVALID (-1)
181
#define XT_SOCKET_ERROR (-1)
182
183
#else
184
/* 默认 lwip 平台(lm620_internal、quectel 等嵌入式平台) */
185
186
#ifndef errno
187
#error "xt_socket: lwip platform requires errno - check LWIP_PROVIDE_ERRNO in lwipopts.h"
188
#endif
189
190
typedef
int
xt_socket_t
;
191
#define XT_SOCKET_INVALID (-1)
192
#define XT_SOCKET_ERROR (-1)
193
194
#ifndef closesocket
195
#define closesocket(s) lwip_close(s)
196
#endif
197
198
#endif
199
200
/* ==================== [Defines] =========================================== */
201
202
/*
203
* select() 的 nfds 参数跨平台安全计算。
204
* Windows 忽略此参数,传入 0 避免 SOCKET→int 截断。
205
* POSIX 需传入最大 fd + 1。
206
*/
207
#if !defined(XT_SELECT_NFDS)
208
#if defined(XT_SDK_PLATFORM_WINDOWS)
209
#define XT_SELECT_NFDS(fd) 0
210
#else
211
#define XT_SELECT_NFDS(fd) ((int)(fd) + 1)
212
#endif
213
#endif
214
215
/* ==================== [Global Prototypes] ================================= */
216
233
xt_err_t
xt_socket_setup
(
void
);
234
247
void
xt_socket_cleanup
(
void
);
248
265
int
xt_socket_errno
(
void
);
266
285
const
char
*
xt_socket_strerror
(
int
err);
286
309
xt_err_t
xt_socket_set_nonblock
(
xt_socket_t
s,
int
nonblock);
310
323
static
inline
int
xt_socket_read
(
xt_socket_t
s,
void
*buf,
size_t
len)
324
{
325
#if defined(XT_SDK_PLATFORM_WINDOWS)
326
return
recv(s, buf, (
int
)len, 0);
327
#else
328
int
ret;
329
do
{
330
ret = (int)read(s, buf, len);
331
}
while
(ret < 0 && errno == EINTR);
332
return
ret;
333
#endif
334
}
335
347
static
inline
int
xt_socket_write
(
xt_socket_t
s,
const
void
*buf,
size_t
len)
348
{
349
#if defined(XT_SDK_PLATFORM_WINDOWS)
350
return
send(s, buf, (
int
)len, 0);
351
#else
352
int
ret;
353
do
{
354
ret = (int)write(s, buf, len);
355
}
while
(ret < 0 && errno == EINTR);
356
return
ret;
357
#endif
358
}
359
360
/* ==================== [Macros] ============================================ */
361
/* xt_socket */
363
364
#ifdef __cplusplus
365
}
/* extern "C" */
366
#endif
367
368
#endif
/* __XT_SOCKET_H__ */
xt_err_t
int32_t xt_err_t
错误码类型
定义
xt_error.h:38
xt_socket_read
static int xt_socket_read(xt_socket_t s, void *buf, size_t len)
从 Socket 读取数据(POSIX read 的跨平台封装)
定义
xt_socket.h:323
xt_socket_write
static int xt_socket_write(xt_socket_t s, const void *buf, size_t len)
向 Socket 写入数据(POSIX write 的跨平台封装)
定义
xt_socket.h:347
xt_socket_set_nonblock
xt_err_t xt_socket_set_nonblock(xt_socket_t s, int nonblock)
设置或清除 Socket 非阻塞模式
xt_socket_setup
xt_err_t xt_socket_setup(void)
初始化 Socket 平台层
xt_socket_t
int xt_socket_t
定义
xt_socket.h:190
xt_socket_errno
int xt_socket_errno(void)
获取最近一次 Socket 操作的错误码
xt_socket_cleanup
void xt_socket_cleanup(void)
反初始化 Socket 平台层
xt_socket_strerror
const char * xt_socket_strerror(int err)
将 Socket 错误码转为可读字符串
xt_utils.h
XTINY 通用工具函数集合(字节序、对齐读取、log2 等)
components
xt_socket
xt_socket.h
生成于
, 为 xt-sdk 文档使用
1.17.0