Kullanarak soketin bağlantısı kesildiğinde algılamayı seçme İstemcinin select() işleviyle bağlantısı kesildiğinde algılamaya çalışıyorum. Sorun şu ki, select() 'nin nasıl çalıştığını pek anlamış değilim. Aşağıdaki kodu kullanıyorum, yanlış yaptığımı ve/veya istemcinin bağlantısının kesildiğini nasıl anlayabileceğimi söyler misiniz? Bloke olmayan prizler kullanıyorum. Bir yuva kapattığındaSelect()
int Network::bytesAvailable()
{
long bytes = 0;
if(ioctl(this->sockfd, FIONREAD, &bytes) < 0)
{
printf("ERROR: Network:bytesAvailable: ioctl() call failed.\n");
return -1;
}
return bytes;
}
NetworkStatus Network::status()
{
struct timeval tv;
fd_set fd;
int result = 0;
tv.tv_sec = 5;
tv.tv_usec = 0;
FD_ZERO(&fd);
FD_SET(this->sockfd, &fd);
result = select(this->sockfd + 1, &fd, 0, 0, &tv);
if(result && !this->bytesAvailable())
{
return -1; // disconnected, I'm guessing this is definitely WRONG.
}
else if(result > 0 && FD_ISSET(this->sockfd, &fd))
{
return 1; // bytes available.
}
else if(!result)
{
return 0; // timeout
}
return -1; // select() call failed.
}
Genel olarak, bağlantının olup olmadığını tespit ediyoruz? 'keepalive' ve' select() 'yi kullanarak çoğullama için kullanırız. ** doğru değil mi? –
Dilbilgisini anlamıyorum, affedersiniz :) – user2399415
Üzgünüm İngilizce'm çok kötü :(ama yorumunu düzenledim, şimdi anladım mı? –