git-svn-id: svn://db.shs.com.ru/pip@750 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -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
|
//! \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;}
|
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<typename Type0, typename Type1> inline PIByteArray & operator <<(PIByteArray & s, const PIPair<Type0, Type1> & v);
|
template<typename Type0, typename Type1> inline PIByteArray & operator <<(PIByteArray & s, const PIPair<Type0, Type1> & v);
|
||||||
//! \relatesalso PIByteArray \brief Store operator
|
//! \relatesalso PIByteArray \brief Store operator
|
||||||
|
|||||||
@@ -288,9 +288,9 @@ bool PIEthernet::init() {
|
|||||||
pr = IPPROTO_TCP;
|
pr = IPPROTO_TCP;
|
||||||
}
|
}
|
||||||
PIFlags<Parameters> params = parameters();
|
PIFlags<Parameters> params = parameters();
|
||||||
sock = socket(AF_INET, st, pr);
|
sock = ::socket(AF_INET, st, pr);
|
||||||
if (params[SeparateSockets])
|
if (params[SeparateSockets])
|
||||||
sock_s = socket(AF_INET, st, pr);
|
sock_s = ::socket(AF_INET, st, pr);
|
||||||
else
|
else
|
||||||
sock_s = sock;
|
sock_s = sock;
|
||||||
if (sock == -1 || sock_s == -1) {
|
if (sock == -1 || sock_s == -1) {
|
||||||
@@ -741,6 +741,7 @@ int PIEthernet::readDevice(void * read_to, int max_size) {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (connected_) {
|
if (connected_) {
|
||||||
|
piCoutObj << "Disconnect on read," << ethErrorString();
|
||||||
init();
|
init();
|
||||||
connected_ = false;
|
connected_ = false;
|
||||||
disconnected(rs < 0);
|
disconnected(rs < 0);
|
||||||
@@ -837,10 +838,10 @@ int PIEthernet::writeDevice(const void * data, int max_size) {
|
|||||||
if (!connected_) return -1;
|
if (!connected_) return -1;
|
||||||
ret = ::send(sock, (const char *)data, max_size, 0);
|
ret = ::send(sock, (const char *)data, max_size, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
connected_ = false; {
|
connected_ = false;
|
||||||
init();
|
piCoutObj << "Disconnect on write," << ethErrorString();
|
||||||
disconnected(true);
|
init();
|
||||||
}
|
disconnected(true);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
default: break;
|
default: break;
|
||||||
@@ -1097,7 +1098,7 @@ PIEthernet::InterfaceList PIEthernet::interfaces() {
|
|||||||
# endif*/
|
# endif*/
|
||||||
# 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);
|
||||||
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) {
|
||||||
@@ -1125,7 +1126,7 @@ PIEthernet::InterfaceList PIEthernet::interfaces() {
|
|||||||
delete ifc.ifc_buf;
|
delete ifc.ifc_buf;
|
||||||
# else
|
# else
|
||||||
struct ifaddrs * ret;
|
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) {
|
if (getifaddrs(&ret) == 0) {
|
||||||
while (ret != 0) {
|
while (ret != 0) {
|
||||||
if (ret->ifa_addr == 0) {
|
if (ret->ifa_addr == 0) {
|
||||||
@@ -1209,7 +1210,7 @@ PIEthernet::Address PIEthernet::interfaceAddress(const PIString & interface_) {
|
|||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
memset(&ifr, 0, sizeof(ifr));
|
memset(&ifr, 0, sizeof(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);
|
ioctl(s, SIOCGIFADDR, &ifr);
|
||||||
::close(s);
|
::close(s);
|
||||||
struct sockaddr_in * sa = (struct sockaddr_in * )&ifr.ifr_addr;
|
struct sockaddr_in * sa = (struct sockaddr_in * )&ifr.ifr_addr;
|
||||||
|
|||||||
@@ -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());}
|
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;}
|
virtual bool canWrite() const {return mode() & WriteOnly;}
|
||||||
|
|
||||||
|
int socket() const {return sock;}
|
||||||
|
|
||||||
EVENT1(newConnection, PIEthernet * , client)
|
EVENT1(newConnection, PIEthernet * , client)
|
||||||
EVENT0(connected)
|
EVENT0(connected)
|
||||||
@@ -500,15 +502,15 @@ private:
|
|||||||
static void server_func(void * eth);
|
static void server_func(void * eth);
|
||||||
void setType(Type t, bool reopen = true) {setProperty(PIStringAscii("type"), (int)t); if (reopen && isOpened()) {closeDevice(); init(); openDevice();}}
|
void setType(Type t, bool reopen = true) {setProperty(PIStringAscii("type"), (int)t); if (reopen && isOpened()) {closeDevice(); init(); openDevice();}}
|
||||||
|
|
||||||
inline static int ethErrorCore();
|
static int ethErrorCore();
|
||||||
inline static PIString ethErrorString();
|
static PIString ethErrorString();
|
||||||
inline static int ethRecv(int sock, void * buf, int size, int flags = 0);
|
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);
|
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);
|
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);
|
static void ethClosesocket(int sock, bool shutdown);
|
||||||
inline static int ethSetsockopt(int sock, int level, int optname, const void * optval, int optlen);
|
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);
|
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 ethSetsockoptBool(int sock, int level, int optname, bool value = true);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user