MCPcopy Create free account
hub / github.com/Pagghiu/SaneCppLibraries / socketClientServer

Method socketClientServer

Tests/Libraries/Socket/SocketTest.cpp:121–195  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

119}
120
121void SC::SocketTest::socketClientServer(SocketFlags::SocketType socketType, SocketFlags::ProtocolType protocol)
122{
123 SocketDescriptor serverSocket;
124 SocketServer server(serverSocket);
125 SocketFlags::AddressFamily invalidFamily;
126 SC_TEST_EXPECT(not serverSocket.getAddressFamily(invalidFamily));
127 // Look for an available port
128 const uint16_t tcpPort = report.mapPort(5050);
129 static constexpr StringView serverAddress = "::1"; //"127.0.0.1"
130
131 SocketIPAddress nativeAddress;
132 SC_TEST_EXPECT(nativeAddress.fromAddressPort(serverAddress, tcpPort));
133 SC_TEST_EXPECT(serverSocket.create(nativeAddress.getAddressFamily(), socketType, protocol));
134 SC_TEST_EXPECT(server.bind(nativeAddress));
135 if (protocol == SocketFlags::ProtocolTcp)
136 {
137 SC_TEST_EXPECT(server.listen(0));
138 }
139 static constexpr char testValue = 123;
140 struct Params
141 {
142 Result connectRes = Result(false);
143 Result writeRes = Result(false);
144 Result closeRes = Result(false);
145 EventObject eventObject;
146 uint16_t port = 0;
147 } params;
148 params.port = tcpPort;
149 SocketDescriptor clientSocket;
150 SC_TEST_EXPECT(clientSocket.create(nativeAddress.getAddressFamily(), socketType, protocol));
151 auto func = [&clientSocket, &params](Thread& thread)
152 {
153 thread.setThreadName(SC_NATIVE_STR("func"));
154 SocketClient client(clientSocket);
155 params.connectRes = client.connect(serverAddress, params.port);
156 char buf[1] = {testValue};
157 params.writeRes = client.write({buf, sizeof(buf)});
158 params.eventObject.wait();
159 buf[0]++;
160 params.writeRes = client.write({buf, sizeof(buf)});
161 params.eventObject.wait();
162 params.closeRes = clientSocket.close();
163 };
164 Thread thread;
165 SC_TEST_EXPECT(thread.start(func));
166 SocketFlags::AddressFamily family;
167 SC_TEST_EXPECT(serverSocket.getAddressFamily(family));
168 SocketDescriptor acceptedClientSocket;
169 if (protocol == SocketFlags::ProtocolTcp)
170 {
171 SC_TEST_EXPECT(server.accept(family, acceptedClientSocket));
172 SC_TEST_EXPECT(acceptedClientSocket.isValid());
173 }
174
175 SocketDescriptor& socket = protocol == SocketFlags::ProtocolTcp ? acceptedClientSocket : serverSocket;
176 SocketClient acceptedClient(socket);
177 Span<char> readData;
178 char buf[1] = {0};

Callers

nothing calls this directly

Calls 15

getAddressFamilyMethod · 0.80
mapPortMethod · 0.80
createMethod · 0.45
bindMethod · 0.45
setThreadNameMethod · 0.45
connectMethod · 0.45
writeMethod · 0.45
waitMethod · 0.45
closeMethod · 0.45
startMethod · 0.45
acceptMethod · 0.45
isValidMethod · 0.45

Tested by

no test coverage detected