MCPcopy Create free account
hub / github.com/Kitware/CMake / connect

Method connect

Utilities/cmcppdap/src/socket.cpp:280–332  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

278}
279
280std::shared_ptr<ReaderWriter> Socket::connect(const char* address,
281 const char* port,
282 uint32_t timeoutMillis) {
283 auto shared = Shared::create(address, port);
284 if (!shared) {
285 return nullptr;
286 }
287
288 std::shared_ptr<ReaderWriter> out;
289 shared->lock([&](SOCKET socket, const addrinfo* info) {
290 if (socket == InvalidSocket) {
291 return;
292 }
293
294 if (timeoutMillis == 0) {
295 if (::connect(socket, info->ai_addr, (int)info->ai_addrlen) == 0) {
296 out = shared;
297 }
298 return;
299 }
300
301 if (!setBlocking(socket, false)) {
302 return;
303 }
304
305 auto res = ::connect(socket, info->ai_addr, (int)info->ai_addrlen);
306 if (res == 0) {
307 if (setBlocking(socket, true)) {
308 out = shared;
309 }
310 } else {
311 const auto microseconds = timeoutMillis * 1000;
312
313 fd_set fdset;
314 FD_ZERO(&fdset);
315 FD_SET(socket, &fdset);
316
317 timeval tv;
318 tv.tv_sec = microseconds / 1000000;
319 tv.tv_usec = microseconds - static_cast<uint32_t>(tv.tv_sec * 1000000);
320 res = select(static_cast<int>(socket + 1), nullptr, &fdset, nullptr, &tv);
321 if (res > 0 && !errored(socket) && setBlocking(socket, true)) {
322 out = shared;
323 }
324 }
325 });
326
327 if (!out) {
328 return nullptr;
329 }
330
331 return out->isOpen() ? out : nullptr;
332}
333
334} // namespace dap

Callers 4

HelloWorldMethod · 0.45
mainFunction · 0.45
TEST_FFunction · 0.45
cmDebuggerAdapterMethod · 0.45

Calls 5

connectFunction · 0.85
setBlockingFunction · 0.85
erroredFunction · 0.85
lockMethod · 0.80
isOpenMethod · 0.45

Tested by 1

TEST_FFunction · 0.36