diff --git a/libs/main/io_devices/piethernet.cpp b/libs/main/io_devices/piethernet.cpp index e4c086b0..024d3a03 100644 --- a/libs/main/io_devices/piethernet.cpp +++ b/libs/main/io_devices/piethernet.cpp @@ -1179,13 +1179,19 @@ PIEthernet::InterfaceList PIEthernet::interfaces() { # else # ifdef ANDROID 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_buf = new char[ifc.ifc_len]; if (ioctl(s, SIOCGIFCONF, &ifc) < 0) { piCout << "[PIEthernet]" << "Can`t get interfaces: %1"_tr("PIEthernet").arg(errorString()); delete[] ifc.ifc_buf; + ::close(s); return il; } 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; il << ci; } - delete ifc.ifc_buf; + delete[] ifc.ifc_buf; + ::close(s); # else struct ifaddrs *ret, *cif = 0; int s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_IP); @@ -1295,8 +1302,10 @@ PINetworkAddress PIEthernet::interfaceAddress(const PIString & interface_) { piZeroMemory(ifr); strcpy(ifr.ifr_name, interface_.dataAscii()); int s = ::socket(AF_INET, SOCK_DGRAM, 0); - ioctl(s, SIOCGIFADDR, &ifr); - ::close(s); + if (s != -1) { + ioctl(s, SIOCGIFADDR, &ifr); + ::close(s); + } struct sockaddr_in * sa = (struct sockaddr_in *)&ifr.ifr_addr; return PINetworkAddress(uint(sa->sin_addr.s_addr)); #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) { if (sock < 0) return -1; auto ret = setsockopt(sock, - level, - optname, + level, + optname, #ifdef WINDOWS - (char *) + (char *) #endif - optval, - optlen); + optval, + optlen); if (ret != 0) piCout << "setsockopt error:" << ethErrorString(); return ret; }