PIP Bugfixes #207
@@ -1179,13 +1179,19 @@ PIEthernet::InterfaceList PIEthernet::interfaces() {
|
|||||||
# else
|
# else
|
||||||
# ifdef ANDROID
|
# ifdef ANDROID
|
||||||
struct ifconf ifc;
|
struct ifconf ifc;
|
||||||
int s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
|
int s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
|
||||||
|
if (s == -1) {
|
||||||
|
piCout << "[PIEthernet]"
|
||||||
|
<< "Can`t create socket: %1"_tr("PIEthernet").arg(errorString());
|
||||||
|
return il;
|
||||||
|
}
|
||||||
ifc.ifc_len = 256;
|
ifc.ifc_len = 256;
|
||||||
ifc.ifc_buf = new char[ifc.ifc_len];
|
ifc.ifc_buf = new char[ifc.ifc_len];
|
||||||
if (ioctl(s, SIOCGIFCONF, &ifc) < 0) {
|
if (ioctl(s, SIOCGIFCONF, &ifc) < 0) {
|
||||||
piCout << "[PIEthernet]"
|
piCout << "[PIEthernet]"
|
||||||
<< "Can`t get interfaces: %1"_tr("PIEthernet").arg(errorString());
|
<< "Can`t get interfaces: %1"_tr("PIEthernet").arg(errorString());
|
||||||
delete[] ifc.ifc_buf;
|
delete[] ifc.ifc_buf;
|
||||||
|
::close(s);
|
||||||
return il;
|
return il;
|
||||||
}
|
}
|
||||||
int icnt = ifc.ifc_len / sizeof(ifreq);
|
int icnt = ifc.ifc_len / sizeof(ifreq);
|
||||||
@@ -1204,7 +1210,8 @@ PIEthernet::InterfaceList PIEthernet::interfaces() {
|
|||||||
if (ci.address == "127.0.0.1") ci.flags |= PIEthernet::ifLoopback;
|
if (ci.address == "127.0.0.1") ci.flags |= PIEthernet::ifLoopback;
|
||||||
il << ci;
|
il << ci;
|
||||||
}
|
}
|
||||||
delete ifc.ifc_buf;
|
delete[] ifc.ifc_buf;
|
||||||
|
::close(s);
|
||||||
# else
|
# else
|
||||||
struct ifaddrs *ret, *cif = 0;
|
struct ifaddrs *ret, *cif = 0;
|
||||||
int s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
|
int s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
|
||||||
@@ -1295,8 +1302,10 @@ PINetworkAddress PIEthernet::interfaceAddress(const PIString & interface_) {
|
|||||||
piZeroMemory(ifr);
|
piZeroMemory(ifr);
|
||||||
strcpy(ifr.ifr_name, interface_.dataAscii());
|
strcpy(ifr.ifr_name, interface_.dataAscii());
|
||||||
int s = ::socket(AF_INET, SOCK_DGRAM, 0);
|
int s = ::socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
ioctl(s, SIOCGIFADDR, &ifr);
|
if (s != -1) {
|
||||||
::close(s);
|
ioctl(s, SIOCGIFADDR, &ifr);
|
||||||
|
::close(s);
|
||||||
|
}
|
||||||
struct sockaddr_in * sa = (struct sockaddr_in *)&ifr.ifr_addr;
|
struct sockaddr_in * sa = (struct sockaddr_in *)&ifr.ifr_addr;
|
||||||
return PINetworkAddress(uint(sa->sin_addr.s_addr));
|
return PINetworkAddress(uint(sa->sin_addr.s_addr));
|
||||||
#endif
|
#endif
|
||||||
@@ -1417,13 +1426,13 @@ void PIEthernet::ethClosesocket(int sock, bool shutdown) {
|
|||||||
int PIEthernet::ethSetsockopt(int sock, int level, int optname, const void * optval, int optlen) {
|
int PIEthernet::ethSetsockopt(int sock, int level, int optname, const void * optval, int optlen) {
|
||||||
if (sock < 0) return -1;
|
if (sock < 0) return -1;
|
||||||
auto ret = setsockopt(sock,
|
auto ret = setsockopt(sock,
|
||||||
level,
|
level,
|
||||||
optname,
|
optname,
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
(char *)
|
(char *)
|
||||||
#endif
|
#endif
|
||||||
optval,
|
optval,
|
||||||
optlen);
|
optlen);
|
||||||
if (ret != 0) piCout << "setsockopt error:" << ethErrorString();
|
if (ret != 0) piCout << "setsockopt error:" << ethErrorString();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user