MCPcopy Create free account
hub / github.com/danoon2/Boxedwine / nativeSocketPair

Method nativeSocketPair

platform/windows/platform.cpp:322–373  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

320}
321
322int Platform::nativeSocketPair(S32 socks[2]) {
323 union {
324 struct sockaddr_in inaddr;
325 struct sockaddr addr;
326 } a = {};
327 socklen_t addrlen = sizeof(a.inaddr);
328 DWORD flags = 0;
329 int reuse = 1;
330
331 if (socks == nullptr) {
332 WSASetLastError(WSAEINVAL);
333 return SOCKET_ERROR;
334 }
335
336 SOCKET listener = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
337 if (listener == INVALID_SOCKET)
338 return SOCKET_ERROR;
339
340 a.inaddr.sin_family = AF_INET;
341 a.inaddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
342 a.inaddr.sin_port = 0;
343
344 socks[0] = socks[1] = (U32)INVALID_SOCKET;
345 do {
346 if (setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, (char*) &reuse, (socklen_t) sizeof(reuse)) == -1)
347 break;
348 if (bind(listener, &a.addr, sizeof(a.inaddr)) == SOCKET_ERROR)
349 break;
350 if (getsockname(listener, &a.addr, &addrlen) == SOCKET_ERROR)
351 break;
352 if (listen(listener, 1) == SOCKET_ERROR)
353 break;
354 socks[0] = (U32)WSASocket(AF_INET, SOCK_STREAM, 0, nullptr, 0, flags);
355 if (socks[0] == (U32)INVALID_SOCKET)
356 break;
357 if (connect(socks[0], &a.addr, sizeof(a.inaddr)) == SOCKET_ERROR)
358 break;
359 socks[1] = (U32)accept(listener, nullptr, nullptr);
360 if (socks[1] == INVALID_SOCKET)
361 break;
362
363 closesocket(listener);
364 return 0;
365 } while (0);
366
367 int e = WSAGetLastError();
368 closesocket(listener);
369 closesocket(socks[0]);
370 closesocket(socks[1]);
371 WSASetLastError(e);
372 return SOCKET_ERROR;
373}
374
375typedef struct _PROCESSOR_POWER_INFORMATION
376{

Callers

nothing calls this directly

Calls 2

bindFunction · 0.85
closesocketFunction · 0.85

Tested by

no test coverage detected