私のlinuxのC++アプリケーションでは、ソケットピアがローカルの場合に関数のハットが与えられたソケットをチェックします。すべてのローカルIPを取得する方法はわかっていますが、ソケットピアがローカルIPSリストのものかどうかを確認する方法はわかりません。ソケットピアを取得するIPS linux
助けてくださいか?コードでお願いします!
10倍
私のlinuxのC++アプリケーションでは、ソケットピアがローカルの場合に関数のハットが与えられたソケットをチェックします。すべてのローカルIPを取得する方法はわかっていますが、ソケットピアがローカルIPSリストのものかどうかを確認する方法はわかりません。ソケットピアを取得するIPS linux
助けてくださいか?コードでお願いします!
10倍
あなたはソケットのピア側のためgetpeername()
を探しています。ソケットのローカル側にgetsockname()
を使用してください。次のスニペットは、インターネットドメイン内のソケットローカルおよびピアアドレスを取得します。あなたが必要な場合は、他のタイプのソケットを扱うためにそれを拡張するためにあなたに任せておきます。私はいくつかの初歩的なエラーチェックをボーナスとして含めました。
int
get_addresses(int sd, struct sockaddr_in *local_ptr,
struct sockaddr_in *peer_ptr)
{
int rc = -1;
if (local_ptr == NULL || peer_ptr == NULL) {
errno = EFAULT;
return rc;
}
if (sd == -1) {
errno = EBADF;
return rc;
}
if (local_ptr->sin_family != AF_INET || peer_ptr->sin_family != AF_INET) {
errno = EINVAL;
return rc;
}
rc = getsockname(sd, (struct sockaddr*)local_ptr,
sizeof(struct sockaddr_in));
if (rc == 0) {
rc = getpeername(sd, (struct sockaddr*)local_ptr,
sizeof(struct sockaddr_in));
if (rc < 0) {
if (errno == ENOTCONN) {
/* socket is not connected so zero out the peer side */
peer_ptr->sin_len = sizeof(struct sockaddr_in);
peer_ptr->sin_family = AF_INET;
peer_ptr->sin_port = 0;
peer_ptr->sin_addr.s_addr = INADDR_NONE;
rc = 0;
}
}
}
return rc;
}
あなたはあなたが持っているものを投稿できますか? – Anonymoose