improve socket_helper add functions to get ip

This commit is contained in:
lixianjing 2023-08-28 11:48:55 +08:00
parent 93e0a4e286
commit 1679513180
4 changed files with 109 additions and 10 deletions

View File

@ -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
* 完善编辑脚本(感谢智明提供补丁)

View File

@ -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*/

View File

@ -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

View File

@ -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*/