mirror of
https://github.com/zlgopen/awtk.git
synced 2025-05-08 19:44:45 +08:00
improve socket_helper add functions to get ip
This commit is contained in:
parent
93e0a4e286
commit
1679513180
@ -1,4 +1,7 @@
|
||||
# 最新动态
|
||||
2023/08/28
|
||||
* 增加函数tk\_socket\_get\_client\_ip/tk\_socket\_get\_self\_ip/tk\_socket\_get\_client\_ip\_str/tk\_socket\_get\_self\_ip\_str
|
||||
|
||||
2023/08/25
|
||||
* 完善wasm helper
|
||||
* 完善编辑脚本(感谢智明提供补丁)
|
||||
|
@ -78,7 +78,7 @@ ret_t tk_socket_bind_ex(int sock, const char* ip, int port) {
|
||||
memset(&s, 0, sizeof(s));
|
||||
|
||||
if (ip != NULL) {
|
||||
socket_resolve(ip, port, &s);
|
||||
tk_socket_resolve(ip, port, &s);
|
||||
} else {
|
||||
s.sin_family = AF_INET;
|
||||
s.sin_port = htons(port);
|
||||
@ -151,7 +151,7 @@ int tk_udp_listen(int port) {
|
||||
|
||||
#define h_addr h_addr_list[0]
|
||||
|
||||
struct sockaddr* socket_resolve(const char* host, int port, struct sockaddr_in* addr) {
|
||||
struct sockaddr* tk_socket_resolve(const char* host, int port, struct sockaddr_in* addr) {
|
||||
struct hostent* h = NULL;
|
||||
return_value_if_fail(host != NULL && addr != NULL, NULL);
|
||||
|
||||
@ -171,7 +171,7 @@ struct sockaddr* socket_resolve(const char* host, int port, struct sockaddr_in*
|
||||
int tk_tcp_connect(const char* host, int port) {
|
||||
int sock = 0;
|
||||
struct sockaddr_in s_in;
|
||||
struct sockaddr* addr = socket_resolve(host, port, &s_in);
|
||||
struct sockaddr* addr = tk_socket_resolve(host, port, &s_in);
|
||||
return_value_if_fail(addr != NULL, -1);
|
||||
|
||||
if ((sock = (int)socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
|
||||
@ -191,7 +191,7 @@ int tk_tcp_connect(const char* host, int port) {
|
||||
int tk_udp_connect(const char* host, int port) {
|
||||
int sock = 0;
|
||||
struct sockaddr_in s_in;
|
||||
struct sockaddr* addr = socket_resolve(host, port, &s_in);
|
||||
struct sockaddr* addr = tk_socket_resolve(host, port, &s_in);
|
||||
return_value_if_fail(addr != NULL, -1);
|
||||
|
||||
if ((sock = (int)socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
||||
@ -254,7 +254,7 @@ ret_t tk_socket_wait_for_data(int sock, uint32_t timeout_ms) {
|
||||
return ret > 0 ? RET_OK : RET_TIMEOUT;
|
||||
}
|
||||
|
||||
bool_t socket_last_io_has_error(void) {
|
||||
bool_t tk_socket_last_io_has_error(void) {
|
||||
#ifndef WIN32
|
||||
int eno = errno;
|
||||
return eno != EAGAIN && eno != 0;
|
||||
@ -264,4 +264,50 @@ bool_t socket_last_io_has_error(void) {
|
||||
#endif /*WIN32*/
|
||||
}
|
||||
|
||||
uint32_t tk_socket_get_client_ip(int sockfd) {
|
||||
struct sockaddr_in addr;
|
||||
socklen_t addrLen = sizeof(addr);
|
||||
|
||||
if (getpeername(sockfd, (struct sockaddr*)&addr, &addrLen) == 0) {
|
||||
return addr.sin_addr.s_addr;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t tk_socket_get_self_ip(int sockfd) {
|
||||
struct sockaddr_in addr;
|
||||
socklen_t addrLen = sizeof(addr);
|
||||
|
||||
if (getsockname(sockfd, (struct sockaddr*)&addr, &addrLen) == 0) {
|
||||
return addr.sin_addr.s_addr;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char* tk_socket_get_client_ip_str(int sockfd, char* ip, int len) {
|
||||
struct sockaddr_in addr;
|
||||
socklen_t addrLen = sizeof(addr);
|
||||
return_value_if_fail(ip != NULL && len > 0, NULL);
|
||||
|
||||
if (getpeername(sockfd, (struct sockaddr*)&addr, &addrLen) == 0) {
|
||||
return inet_ntop(AF_INET, &(addr.sin_addr), ip, len);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char* tk_socket_get_self_ip_str(int sockfd, char* ip, int len) {
|
||||
struct sockaddr_in addr;
|
||||
socklen_t addrLen = sizeof(addr);
|
||||
return_value_if_fail(ip != NULL && len > 0, NULL);
|
||||
|
||||
if (getsockname(sockfd, (struct sockaddr*)&addr, &addrLen) == 0) {
|
||||
return inet_ntop(AF_INET, &(addr.sin_addr), ip, len);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /*WITH_SOCKET*/
|
||||
|
@ -29,7 +29,7 @@
|
||||
BEGIN_C_DECLS
|
||||
|
||||
/**
|
||||
* @class socket
|
||||
* @class tk_socket_t
|
||||
* @annotation ["fake"]
|
||||
*/
|
||||
|
||||
@ -88,13 +88,13 @@ ret_t tk_socket_bind_ex(int sock, const char* ip, int port);
|
||||
ret_t tk_socket_bind(int sock, int port);
|
||||
|
||||
/**
|
||||
* @method socket_last_io_has_error
|
||||
* @method tk_socket_last_io_has_error
|
||||
* @annotation ["static"]
|
||||
* 判断最后一次IO操作是否正常。
|
||||
*
|
||||
* @return {bool_t} 返回TRUE表示有错误,否则表示正常。
|
||||
*/
|
||||
bool_t socket_last_io_has_error(void);
|
||||
bool_t tk_socket_last_io_has_error(void);
|
||||
|
||||
/**
|
||||
* @method tk_socket_wait_for_data
|
||||
@ -120,7 +120,7 @@ ret_t tk_socket_wait_for_data(int sock, uint32_t timeout_ms);
|
||||
ret_t tk_socket_set_blocking(int sock, bool_t blocking);
|
||||
|
||||
/**
|
||||
* @method socket_resolve
|
||||
* @method tk_socket_resolve
|
||||
* @annotation ["static"]
|
||||
* 解析主机名,并初始化addr对象。
|
||||
*
|
||||
@ -130,7 +130,55 @@ ret_t tk_socket_set_blocking(int sock, bool_t blocking);
|
||||
*
|
||||
* @return {struct sockaddr*} 返回地址对象。
|
||||
*/
|
||||
struct sockaddr* socket_resolve(const char* host, int port, struct sockaddr_in* addr);
|
||||
struct sockaddr* tk_socket_resolve(const char* host, int port, struct sockaddr_in* addr);
|
||||
|
||||
/**
|
||||
* @method tk_socket_get_client_ip
|
||||
* @annotation ["static"]
|
||||
* 获取客户端IP。
|
||||
*
|
||||
* @param {int} sockfd socket句柄。
|
||||
*
|
||||
* @return {uint32_t} 返回客户端IP。
|
||||
*/
|
||||
uint32_t tk_socket_get_client_ip(int sockfd);
|
||||
|
||||
/**
|
||||
* @method tk_socket_get_self_ip
|
||||
* @annotation ["static"]
|
||||
* 获取本地IP。
|
||||
*
|
||||
* @param {int} sockfd socket句柄。
|
||||
*
|
||||
* @return {uint32_t} 返回本地IP。
|
||||
*/
|
||||
uint32_t tk_socket_get_self_ip(int sockfd);
|
||||
|
||||
/**
|
||||
* @method tk_socket_get_client_ip_str
|
||||
* @annotation ["static"]
|
||||
* 获取客户端IP。
|
||||
*
|
||||
* @param {int} sockfd socket句柄。
|
||||
* @param {char*} ip 存放IP地址的内存。
|
||||
* @param {int} len 存放IP地址的内存的长度。
|
||||
*
|
||||
* @return {const char*} 返回IP地址。
|
||||
*/
|
||||
const char* tk_socket_get_client_ip_str(int sockfd, char* ip, int len);
|
||||
|
||||
/**
|
||||
* @method tk_socket_get_self_ip_str
|
||||
* @annotation ["static"]
|
||||
* 获取本地IP。
|
||||
*
|
||||
* @param {int} sockfd socket句柄。
|
||||
* @param {char*} ip 存放IP地址的内存。
|
||||
* @param {int} len 存放IP地址的内存的长度。
|
||||
*
|
||||
* @return {const char*} 返回IP地址。
|
||||
*/
|
||||
const char* tk_socket_get_self_ip_str(int sockfd, char* ip, int len);
|
||||
|
||||
/**
|
||||
* @class tcp_t
|
||||
|
@ -10,4 +10,6 @@
|
||||
#define socket_bind tk_socket_bind
|
||||
#define socket_wait_for_data tk_socket_wait_for_data
|
||||
#define socket_set_blocking tk_socket_set_blocking
|
||||
#define socket_last_io_has_error tk_socket_last_io_has_error
|
||||
#define socket_resolve tk_socket_resolve
|
||||
#endif /*USE_TK_PREFIX*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user