diff --git a/src_main/core/pibytearray.h b/src_main/core/pibytearray.h index 6851cfa1..007c6a64 100755 --- a/src_main/core/pibytearray.h +++ b/src_main/core/pibytearray.h @@ -213,6 +213,7 @@ inline PIByteArray & operator >>(PIByteArray & s, PIByteArray & v) {assert(s.siz //! \relatesalso PIByteArray \brief Restore operator, see \ref PIByteArray_sec1 for details inline PIByteArray & operator >>(PIByteArray & s, PIByteArray::RawData v) {assert(s.size_s() >= v.s); if (v.s > 0) memcpy((void*)(v.d), s.data(), v.s); s.remove(0, v.s); return s;} +#undef PBA_OPERATOR_FROM template inline PIByteArray & operator <<(PIByteArray & s, const PIPair & v); //! \relatesalso PIByteArray \brief Store operator diff --git a/src_main/io_devices/piethernet.cpp b/src_main/io_devices/piethernet.cpp index b6e1ceb2..62506414 100755 --- a/src_main/io_devices/piethernet.cpp +++ b/src_main/io_devices/piethernet.cpp @@ -288,9 +288,9 @@ bool PIEthernet::init() { pr = IPPROTO_TCP; } PIFlags params = parameters(); - sock = socket(AF_INET, st, pr); + sock = ::socket(AF_INET, st, pr); if (params[SeparateSockets]) - sock_s = socket(AF_INET, st, pr); + sock_s = ::socket(AF_INET, st, pr); else sock_s = sock; if (sock == -1 || sock_s == -1) { @@ -741,6 +741,7 @@ int PIEthernet::readDevice(void * read_to, int max_size) { return -1; } if (connected_) { + piCoutObj << "Disconnect on read," << ethErrorString(); init(); connected_ = false; disconnected(rs < 0); @@ -837,10 +838,10 @@ int PIEthernet::writeDevice(const void * data, int max_size) { if (!connected_) return -1; ret = ::send(sock, (const char *)data, max_size, 0); if (ret < 0) { - connected_ = false; { - init(); - disconnected(true); - } + connected_ = false; + piCoutObj << "Disconnect on write," << ethErrorString(); + init(); + disconnected(true); } return ret; default: break; @@ -1097,7 +1098,7 @@ PIEthernet::InterfaceList PIEthernet::interfaces() { # endif*/ # ifdef ANDROID struct ifconf ifc; - int s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); + int s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_IP); ifc.ifc_len = 256; ifc.ifc_buf = new char[ifc.ifc_len]; if (ioctl(s, SIOCGIFCONF, &ifc) < 0) { @@ -1125,7 +1126,7 @@ PIEthernet::InterfaceList PIEthernet::interfaces() { delete ifc.ifc_buf; # else struct ifaddrs * ret; - int s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); + int s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_IP); if (getifaddrs(&ret) == 0) { while (ret != 0) { if (ret->ifa_addr == 0) { @@ -1209,7 +1210,7 @@ PIEthernet::Address PIEthernet::interfaceAddress(const PIString & interface_) { struct ifreq ifr; memset(&ifr, 0, sizeof(ifr)); 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); ::close(s); struct sockaddr_in * sa = (struct sockaddr_in * )&ifr.ifr_addr; diff --git a/src_main/io_devices/piethernet.h b/src_main/io_devices/piethernet.h index 3fbfe9b2..1357f90a 100755 --- a/src_main/io_devices/piethernet.h +++ b/src_main/io_devices/piethernet.h @@ -315,6 +315,8 @@ public: bool send(const Address & addr, const PIByteArray & data, bool threaded = false) {addr_s = addr; if (threaded) {writeThreaded(data); return true;} return (write(data) == data.size_s());} virtual bool canWrite() const {return mode() & WriteOnly;} + + int socket() const {return sock;} EVENT1(newConnection, PIEthernet * , client) EVENT0(connected) @@ -500,15 +502,15 @@ private: static void server_func(void * eth); void setType(Type t, bool reopen = true) {setProperty(PIStringAscii("type"), (int)t); if (reopen && isOpened()) {closeDevice(); init(); openDevice();}} - inline static int ethErrorCore(); - inline static PIString ethErrorString(); - inline static int ethRecv(int sock, void * buf, int size, int flags = 0); - inline static int ethRecvfrom(int sock, void * buf, int size, int flags, sockaddr * addr); - inline static int ethSendto(int sock, const void * buf, int size, int flags, sockaddr * addr, int addr_len); - inline static void ethClosesocket(int sock, bool shutdown); - inline static int ethSetsockopt(int sock, int level, int optname, const void * optval, int optlen); - inline static int ethSetsockoptInt(int sock, int level, int optname, int value = 1); - inline static int ethSetsockoptBool(int sock, int level, int optname, bool value = true); + static int ethErrorCore(); + static PIString ethErrorString(); + static int ethRecv(int sock, void * buf, int size, int flags = 0); + static int ethRecvfrom(int sock, void * buf, int size, int flags, sockaddr * addr); + static int ethSendto(int sock, const void * buf, int size, int flags, sockaddr * addr, int addr_len); + static void ethClosesocket(int sock, bool shutdown); + static int ethSetsockopt(int sock, int level, int optname, const void * optval, int optlen); + static int ethSetsockoptInt(int sock, int level, int optname, int value = 1); + static int ethSetsockoptBool(int sock, int level, int optname, bool value = true); };