MCPcopy Create free account
hub / github.com/Beckhoff/ADS / Socket

Method Socket

AdsLib/Sockets.cpp:117–152  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

115}
116
117Socket::Socket(const struct addrinfo *const host, const int type)
118 : m_WSAInitialized(!InitSocketLibrary())
119 , m_DestAddr(SOCK_DGRAM == type ?
120 reinterpret_cast<const struct sockaddr *>(
121 &m_SockAddress) :
122 nullptr)
123 , m_DestAddrLen(0)
124{
125 for (auto rp = host; rp; rp = rp->ai_next) {
126 m_Socket = socket(rp->ai_family, type, 0);
127 if (INVALID_SOCKET == m_Socket) {
128 continue;
129 }
130 if (SOCK_STREAM == type) {
131 if (::connect(m_Socket, rp->ai_addr, rp->ai_addrlen)) {
132 LOG_WARN("Socket(): connect failed");
133 closesocket(m_Socket);
134 m_Socket = INVALID_SOCKET;
135 continue;
136 }
137 } else { /*if (SOCK_DGRAM == type)*/
138#if defined(_WIN32) || defined(__CYGWIN__)
139 // MSVC on Windows is the only platform using different types for connect() and ai_addrlen ...
140 m_DestAddrLen = static_cast<decltype(m_DestAddrLen)>(
141 rp->ai_addrlen);
142#else
143 m_DestAddrLen = rp->ai_addrlen;
144#endif
145 }
146 memcpy(&m_SockAddress, rp->ai_addr,
147 std::min<size_t>(sizeof(m_SockAddress), rp->ai_addrlen));
148 return;
149 }
150 LOG_ERROR("Unable to create socket");
151 throw std::system_error(WSAGetLastError(), std::system_category());
152}
153
154Socket::~Socket()
155{

Callers

nothing calls this directly

Calls 1

InitSocketLibraryFunction · 0.85

Tested by

no test coverage detected