16.01.2011 - new modules - pimath and pigeometry
This commit is contained in:
@@ -13,30 +13,46 @@ PIEthernet::PIEthernet(PIString ip, int port, void * data_, EthernetFunc slot):
|
||||
WSADATA wsaData;
|
||||
WSAStartup(MAKEWORD(2, 2), &wsaData);
|
||||
#endif
|
||||
sock = socket(PF_INET, SOCK_DGRAM, 0);
|
||||
sock_s = socket(PF_INET, SOCK_DGRAM, 0);
|
||||
if (sock == -1 || sock_s == -1)
|
||||
cout << "[PIEthernet] Unable to create socket" << endl;
|
||||
initSend();
|
||||
}
|
||||
|
||||
|
||||
PIEthernet::~PIEthernet() {
|
||||
if (isRunning()) {
|
||||
stop();
|
||||
pthread_cancel(thread);
|
||||
}
|
||||
if (sock != -1) {
|
||||
shutdown(sock, SHUT_RDWR);
|
||||
close(sock);
|
||||
}
|
||||
if (sock_s != -1) {
|
||||
shutdown(sock_s, SHUT_RDWR);
|
||||
close(sock_s);
|
||||
}
|
||||
terminate();
|
||||
#ifdef WINDOWS
|
||||
WSACleanup();
|
||||
#endif
|
||||
delete buffer;
|
||||
if (sock != -1) {
|
||||
shutdown(sock, SHUT_RDWR);
|
||||
close(sock);
|
||||
sock = -1;
|
||||
}
|
||||
if (sock_s != -1) {
|
||||
shutdown(sock_s, SHUT_RDWR);
|
||||
close(sock_s);
|
||||
sock_s = -1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void PIEthernet::terminate() {
|
||||
if (!initialized()) return;
|
||||
if (isRunning()) {
|
||||
stop();
|
||||
pthread_cancel(thread);
|
||||
}
|
||||
/*if (sock != -1) {
|
||||
shutdown(sock, SHUT_RDWR);
|
||||
shutdown(sock, SHUT_RDWR);
|
||||
close(sock);
|
||||
sock = -1;
|
||||
}
|
||||
if (sock_s != -1) {
|
||||
shutdown(sock_s, SHUT_RDWR);
|
||||
close(sock_s);
|
||||
sock_s = -1;
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
@@ -65,26 +81,29 @@ void PIEthernet::run() {
|
||||
|
||||
|
||||
void PIEthernet::end() {
|
||||
if (sock != -1) {
|
||||
shutdown(sock, SHUT_RDWR);
|
||||
close(sock);
|
||||
sock = -1;
|
||||
}
|
||||
if (sock_s != -1) {
|
||||
shutdown(sock_s, SHUT_RDWR);
|
||||
close(sock_s);
|
||||
sock_s = -1;
|
||||
}
|
||||
//cout << "[PIEthernet] end" << endl;
|
||||
terminate();
|
||||
}
|
||||
|
||||
|
||||
bool PIEthernet::init() {
|
||||
addr_.sin_addr.s_addr = inet_addr(ip_.data());
|
||||
addr_.sin_addr.s_addr = inet_addr(ip_.stdString().data());
|
||||
addr_.sin_family = PF_INET;
|
||||
addr_.sin_port = htons(port_);
|
||||
close(sock);
|
||||
sock = socket(PF_INET, SOCK_DGRAM, 0);
|
||||
if (bind(sock, (sockaddr * )&addr_, sizeof(addr_)) == -1) {
|
||||
cout << "[PIEthernet] Cant`t bind to " << ip_ << ":" << port_ << endl;
|
||||
cout << "[PIEthernet] Cant`t bind to " << ip_.stdString() << ":" << port_ << endl;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool PIEthernet::initSend() {
|
||||
close(sock_s);
|
||||
sock_s = socket(PF_INET, SOCK_DGRAM, 0);
|
||||
if (sock_s == -1) {
|
||||
cout << "[PIEthernet] Unable to create socket" << endl;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -97,7 +116,7 @@ bool PIEthernet::send(PIString ip, int port, char * data, int size) {
|
||||
return false;
|
||||
}
|
||||
saddr_.sin_port = htons(port);
|
||||
saddr_.sin_addr.s_addr = inet_addr(ip.data());
|
||||
saddr_.sin_addr.s_addr = inet_addr(ip.stdString().data());
|
||||
saddr_.sin_family = PF_INET;
|
||||
wrote = sendto(sock_s, data, size, 0, (sockaddr * )&saddr_, sizeof(saddr_));
|
||||
if (wrote != size) {
|
||||
@@ -115,7 +134,7 @@ bool PIEthernet::send(char * data, int size) {
|
||||
return false;
|
||||
}
|
||||
saddr_.sin_port = htons(port_s);
|
||||
saddr_.sin_addr.s_addr = inet_addr(ip_s.data());
|
||||
saddr_.sin_addr.s_addr = inet_addr(ip_s.stdString().data());
|
||||
saddr_.sin_family = PF_INET;
|
||||
//cout << "[PIEthernet] sending in " << sock_s << endl;
|
||||
wrote = sendto(sock_s, data, size, 0, (sockaddr * )&saddr_, sizeof(saddr_));
|
||||
|
||||
Reference in New Issue
Block a user