나는 다음과 같은 코드가 있습니다표준 : : 벡터에 소켓 객체를 이동할 수 없습니다
try
{
HAS::TCPServerSocket servSock(echoServPort); // Socket descriptor for server
std::vector<HAS::TCPSocket*> sockets(MAXCONN);
for (;;)
{
try
{
if (socketCount < MAXCONN)
{
HAS::TCPSocket* sock(servSock.accept());
sockets.push_back(sock);
std::thread handler(handleTCPClient, std::ref(sockets[socketCount++]));
handler.detach();
}
}
catch (...)
{
cerr << "Unable to create thread" << endl;
exit(1);
}
}
}
내가 연결 (MAXCONN=4)
제한된 수의 트랙을 유지하려면 및 std::vector
을 사용하여 열 소켓 추적하려는를 . 여하튼, 위의 코드를 사용할 때 sock
변수가 servSock.accept()
으로 허용되는 현재 소켓으로 올바르게 설정됩니다. 그러나 std::vector
에 sock
변수를 푸시하려고하면 양말 객체가 느슨합니다.
복사 및/또는 이동 생성자를 올바르게 지정해야한다는 느낌이 들지만 양쪽 모두를 정의하고 호출 될 때 구분 점을 사용했지만 전혀 호출되지 않는 것 같습니다. .
std :: vector 소켓 (MAXCONN); 벡터를 최대 크기 4로 초기화해야합니까? ... 어떻게 벡터가 작동 해야하는지 아닙니다. –
Alex
'socketCount'가 최대 크기에 도달하면 프로그램은 busy-loop가됩니다. 그것은 끔찍한 생각처럼 보입니다. 또한, 언제'socketCount'가 * 감소 될 것입니까? –
'std :: vector 소켓 (MAXCONN);'은 네 개의 널 포인터를 포함하도록 벡터를 초기화 할 것이고, 최대 크기로는 아무것도하지 않을 것이다. –