sockopt.[hc]: getIpAndPort support ipv6
parent
b52e516aee
commit
7289215470
3
HISTORY
3
HISTORY
|
|
@ -1,4 +1,7 @@
|
||||||
|
|
||||||
|
Version 1.63 2022-10-16
|
||||||
|
* sockopt.[hc]: getIpAndPort support ipv6
|
||||||
|
|
||||||
Version 1.62 2022-09-28
|
Version 1.62 2022-09-28
|
||||||
* add function fc_sleep_us
|
* add function fc_sleep_us
|
||||||
* add function fc_itoa
|
* add function fc_itoa
|
||||||
|
|
|
||||||
|
|
@ -1101,58 +1101,54 @@ const char * fc_inet_ntop(const struct sockaddr *addr,
|
||||||
in_addr_t getIpaddr(getnamefunc getname, int sock, \
|
in_addr_t getIpaddr(getnamefunc getname, int sock, \
|
||||||
char *buff, const int bufferSize)
|
char *buff, const int bufferSize)
|
||||||
{
|
{
|
||||||
struct sockaddr addr;
|
sockaddr_convert_t convert;
|
||||||
socklen_t addrlen;
|
|
||||||
|
|
||||||
memset(&addr, 0, sizeof(addr));
|
memset(&convert, 0, sizeof(convert));
|
||||||
addrlen = sizeof(addr);
|
convert.len = sizeof(convert.sa);
|
||||||
|
if (getname(sock, &convert.sa.addr, &convert.len) != 0)
|
||||||
if (getname(sock, &addr, &addrlen) != 0)
|
|
||||||
{
|
{
|
||||||
*buff = '\0';
|
*buff = '\0';
|
||||||
return INADDR_NONE;
|
return INADDR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addrlen > 0)
|
if (convert.len > 0)
|
||||||
{
|
{
|
||||||
fc_inet_ntop(&addr, buff, bufferSize);
|
fc_inet_ntop(&convert.sa.addr, buff, bufferSize);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*buff = '\0';
|
*buff = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
return ((struct sockaddr_in *)&addr)->sin_addr.s_addr; //DO NOT support IPv6
|
return convert.sa.addr4.sin_addr.s_addr; //DO NOT support IPv6
|
||||||
}
|
}
|
||||||
|
|
||||||
int getIpAndPort(getnamefunc getname, int sock,
|
int getIpAndPort(getnamefunc getname, int sock,
|
||||||
char *buff, const int bufferSize, int *port)
|
char *buff, const int bufferSize, int *port)
|
||||||
{
|
{
|
||||||
struct sockaddr addr;
|
sockaddr_convert_t convert;
|
||||||
socklen_t addrlen;
|
|
||||||
|
|
||||||
memset(&addr, 0, sizeof(addr));
|
memset(&convert, 0, sizeof(convert));
|
||||||
addrlen = sizeof(addr);
|
convert.len = sizeof(convert.sa);
|
||||||
|
if (getname(sock, &convert.sa.addr, &convert.len) != 0)
|
||||||
if (getname(sock, &addr, &addrlen) != 0)
|
|
||||||
{
|
{
|
||||||
*buff = '\0';
|
*buff = '\0';
|
||||||
return errno != 0 ? errno : EINVAL;
|
return errno != 0 ? errno : EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addrlen > 0)
|
if (convert.len > 0)
|
||||||
{
|
{
|
||||||
fc_inet_ntop(&addr, buff, bufferSize);
|
fc_inet_ntop(&convert.sa.addr, buff, bufferSize);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*buff = '\0';
|
*buff = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addr.sa_family == AF_INET) {
|
if (convert.sa.addr.sa_family == AF_INET) {
|
||||||
*port = ntohs(((struct sockaddr_in *)&addr)->sin_port);
|
*port = ntohs(convert.sa.addr4.sin_port);
|
||||||
} else {
|
} else {
|
||||||
*port = ntohs(((struct sockaddr_in6 *)&addr)->sin6_port);
|
*port = ntohs(convert.sa.addr6.sin6_port);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue