ソケットに接続があるかどうかを確認する方法

ソケットに接続があるかどうかは次のように判断できます。

  1. getsockopt()
  2. SO_エラー
int error = 0;
socklen_t len = sizeof(error);
int ret = getsockopt(socket, SOL_SOCKET, SO_ERROR, &error, &len);
if (ret == 0 && error == 0) {
// socket有连接
} else {
// socket无连接
}
  1. 選択する
fd_set read_set, write_set;
FD_ZERO(&read_set);
FD_ZERO(&write_set);
FD_SET(socket, &read_set);
FD_SET(socket, &write_set);
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 0;
int ret = select(socket + 1, &read_set, &write_set, NULL, &timeout);
if (ret > 0) {
// socket有连接
} else {
// socket无连接
}

ソケットの接続状態は現時点でしか判断できず、継続的に有効であることを保証できません。ソケットの接続状態を継続的に監視する場合は、ハートビートメカニズムまたは定期的なデータ送信を使用してください。

bannerAds