Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef FLATHEADERS
00032 #include "simple_message/socket/tcp_client.h"
00033 #include "simple_message/log_wrapper.h"
00034 #else
00035 #include "tcp_client.h"
00036 #include "log_wrapper.h"
00037 #endif
00038
00039 namespace industrial
00040 {
00041 namespace tcp_client
00042 {
00043
00044 TcpClient::TcpClient()
00045 {
00046
00047 }
00048
00049 TcpClient::~TcpClient()
00050 {
00051 LOG_DEBUG("Destructing TCPClient");
00052 }
00053
00054 bool TcpClient::init(char *buff, int port_num)
00055 {
00056
00057 int rc;
00058 bool rtn;
00059 int disableNodeDelay = 1;
00060 struct hostent *ent;
00061 struct in_addr *in_a;
00062
00063 rc = SOCKET(AF_INET, SOCK_STREAM, 0);
00064 if (this->SOCKET_FAIL != rc)
00065 {
00066 this->setSockHandle(rc);
00067
00068
00069 rc = SET_NO_DELAY(this->getSockHandle(), disableNodeDelay);
00070 if (this->SOCKET_FAIL == rc)
00071 {
00072 LOG_WARN("Failed to set no socket delay, sending data can be delayed by up to 250ms");
00073 }
00074
00075
00076 memset(&this->sockaddr_, 0, sizeof(this->sockaddr_));
00077 this->sockaddr_.sin_family = AF_INET;
00078
00079
00080 if (NULL != (ent = GETHOSTBYNAME(buff)))
00081 {
00082 in_a = (struct in_addr *) ent->h_addr_list[0];
00083 this->sockaddr_.sin_addr.s_addr = in_a->s_addr;
00084 }
00085 else
00086 {
00087 this->sockaddr_.sin_addr.s_addr = INET_ADDR(buff);
00088 }
00089 this->sockaddr_.sin_port = HTONS(port_num);
00090
00091 rtn = true;
00092
00093 }
00094 else
00095 {
00096 LOG_ERROR("Failed to create socket, rc: %d", rc);
00097 rtn = false;
00098 }
00099 return rtn;
00100 }
00101
00102 bool TcpClient::makeConnect()
00103 {
00104 bool rtn = false;
00105 int rc = this->SOCKET_FAIL;
00106 SOCKLEN_T addrSize = 0;
00107
00108 if (!this->isConnected())
00109 {
00110 addrSize = sizeof(this->sockaddr_);
00111 rc = CONNECT(this->getSockHandle(), (sockaddr *)&this->sockaddr_, addrSize);
00112 if (this->SOCKET_FAIL != rc)
00113 {
00114 LOG_INFO("Connected to server");
00115 this->setConnected(true);
00116 rtn = true;
00117 }
00118 else
00119 {
00120 this->logSocketError("Failed to connect to server", rc, errno);
00121 rtn = false;
00122 }
00123 }
00124
00125 else
00126 {
00127 LOG_WARN("Tried to connect when socket already in connected state");
00128 }
00129
00130 return rtn;
00131
00132 }
00133
00134 }
00135 }
00136