3 #include <argos3/core/utility/string_utilities.h>
10 #include <sys/socket.h>
37 ::addrinfo tHints, *ptInterfaceInfo;
38 ::memset(&tHints, 0,
sizeof(tHints));
39 tHints.ai_family = AF_INET;
40 tHints.ai_socktype = SOCK_STREAM;
41 nRetVal = ::getaddrinfo(str_hostname.c_str(),
50 ::addrinfo* ptInterface = NULL;
51 for(ptInterface = ptInterfaceInfo;
52 (ptInterface != NULL) && (m_nStream == -1);
53 ptInterface = ptInterface->ai_next) {
54 m_nStream = ::socket(ptInterface->ai_family,
55 ptInterface->ai_socktype,
56 ptInterface->ai_protocol);
58 if(::connect(m_nStream,
60 ptInterface->ai_addrlen) == -1) {
66 ::freeaddrinfo(ptInterfaceInfo);
77 ::addrinfo tHints, *ptInterfaceInfo;
78 ::memset(&tHints, 0,
sizeof(tHints));
79 tHints.ai_family = AF_INET;
80 tHints.ai_socktype = SOCK_STREAM;
81 tHints.ai_flags = AI_PASSIVE;
82 nRetVal = ::getaddrinfo(NULL,
91 ::addrinfo* ptInterface = NULL;
92 for(ptInterface = ptInterfaceInfo;
93 (ptInterface != NULL) && (m_nStream == -1);
94 ptInterface = ptInterface->ai_next) {
95 m_nStream = ::socket(ptInterface->ai_family,
96 ptInterface->ai_socktype,
97 ptInterface->ai_protocol);
100 if((::setsockopt(m_nStream,
104 sizeof(nTrue)) != -1)
107 ptInterface->ai_addr,
108 ptInterface->ai_addrlen) == -1)) {
113 ::freeaddrinfo(ptInterfaceInfo);
114 if(m_nStream == -1) {
118 if(::listen(m_nStream, n_queue_length) == -1) {
130 ::socklen_t tAddressLen =
sizeof(tAddress);
131 int nNewStream = ::accept(m_nStream, &tAddress, &tAddressLen);
132 if(nNewStream == -1) {
136 c_socket.m_nStream = nNewStream;
137 c_socket.m_strAddress = ::inet_ntoa(
reinterpret_cast< ::sockaddr_in*
>(&tAddress)->sin_addr);
156 nSent = ::send(m_nStream, pun_buffer, un_size, 0);
173 nReceived = ::recv(m_nStream, pun_buffer, un_size, 0);
178 if(nReceived == 0)
return false;
179 un_size -= nReceived;
180 pun_buffer += nReceived;
190 UInt32 unSizeNBO = htonl(c_byte_array.
Size());
204 c_byte_array.
Resize(ntohl(unSizeNBO));