Linux — клиент C ++ должен узнать, что сокет был закрыт витым сервером

У меня есть витой сервер, который что-то делает, а затем закрывает соединение. Клиенты Python понимают с

clientConnectionLost(self, connector, reason)

что соединение было закрыто, и это работает нормально.
Тем не менее, у меня также есть клиент C ++, взаимодействующий с тем же витым сервером. В настоящее время кажется, что он не понимает, что соединение / сокет было закрыто. Как я могу проверить это?

string tcp_client::receive(int size=1024)
{
char buffer[size];
string reply;

int msg = recv(sock , buffer , sizeof(buffer) , 0);

// Receive a reply from the server
if(msg < 0)
{
puts("recv failed");
// Exit the programm
exit(0);
}
reply = buffer;
return reply;
}

клиентский код C ++
Как мне достичь такой же / аналогичной функциональности clientConnectionLost с клиентом C ++?

0

Решение

От человек recv:

Возвращаемое значение будет 0, когда узел выполнил упорядоченное выключение.

Так после recv позвоните, вы можете написать:

string tcp_client::receive(int size=1024)
{
char buffer[size];
string reply;

// Receive a reply from the server
int msg = recv(sock , buffer , sizeof(buffer) , 0);

if(msg < 0)
{
puts("recv failed");

// Exit the programm
exit(0);
}
else if (0 == msg)
{
// the connexion has been closed by server
puts("Connexion lost!");

// close the socket
close(sock);

// return something
return string("");
}
reply = buffer;
return reply;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]