MCPcopy Create free account
hub / github.com/catboost/catboost / TestPollInOut

Method TestPollInOut

util/network/socket_ut.cpp:254–314  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

252}
253
254void TPollTest::TestPollInOut() {
255#ifdef _win_
256 const size_t socketCount = 1000;
257
258 ui16 port = static_cast<ui16>(1300 + rand() % 97);
259 TSocketHolder serverSocket = StartServerSocket(port, socketCount);
260
261 ui32 localIp = ntohl(inet_addr("127.0.0.1"));
262
263 TVector<TSimpleSharedPtr<TSocketHolder>> clientSockets;
264 TVector<TSimpleSharedPtr<TSocketHolder>> connectedSockets;
265 TVector<pollfd> fds;
266
267 for (size_t i = 0; i < socketCount; ++i) {
268 TSimpleSharedPtr<TSocketHolder> clientSocket(new TSocketHolder(StartClientSocket(localIp, port)));
269 clientSockets.push_back(clientSocket);
270
271 if (i % 5 == 0 || i % 5 == 2) {
272 char buffer = 'c';
273 if (send(*clientSocket, &buffer, 1, 0) == -1) {
274 ythrow yexception() << "Can not send (" << LastSystemErrorText() << ")";
275 }
276 }
277
278 TSimpleSharedPtr<TSocketHolder> connectedSocket(new TSocketHolder(AcceptConnection(serverSocket)));
279 connectedSockets.push_back(connectedSocket);
280
281 if (i % 5 == 2 || i % 5 == 3) {
282 closesocket(*clientSocket);
283 shutdown(*clientSocket, SD_BOTH);
284 }
285 }
286
287 int expectedCount = 0;
288 for (size_t i = 0; i < connectedSockets.size(); ++i) {
289 pollfd fd = {(i % 5 == 4) ? INVALID_SOCKET : static_cast<SOCKET>(*connectedSockets[i]), POLLIN | POLLOUT, 0};
290 fds.push_back(fd);
291 if (i % 5 != 4) {
292 ++expectedCount;
293 }
294 }
295
296 int polledCount = poll(&fds[0], fds.size(), INFTIM);
297 UNIT_ASSERT_EQUAL(expectedCount, polledCount);
298
299 for (size_t i = 0; i < connectedSockets.size(); ++i) {
300 short revents = fds[i].revents;
301 if (i % 5 == 0) {
302 UNIT_ASSERT_EQUAL(static_cast<short>(POLLRDNORM | POLLWRNORM), revents);
303 } else if (i % 5 == 1) {
304 UNIT_ASSERT_EQUAL(static_cast<short>(POLLOUT | POLLWRNORM), revents);
305 } else if (i % 5 == 2) {
306 UNIT_ASSERT_EQUAL(static_cast<short>(POLLHUP | POLLRDNORM | POLLWRNORM), revents);
307 } else if (i % 5 == 3) {
308 UNIT_ASSERT_EQUAL(static_cast<short>(POLLHUP | POLLWRNORM), revents);
309 } else if (i % 5 == 4) {
310 UNIT_ASSERT_EQUAL(static_cast<short>(POLLNVAL), revents);
311 }

Callers

nothing calls this directly

Calls 4

pollFunction · 0.70
LastSystemErrorTextFunction · 0.50
push_backMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected