これらは, 保守運用機能のためのクラス. より具体的に言うと, "Dynamic Attach" 機能のためのクラス (See: here for details).
Linux では AttachListener クラスは UNIX domain socket を使って実装されている.
((cite: hotspot/src/os/linux/vm/attachListener_linux.cpp))
// The attach mechanism on Linux uses a UNIX domain socket. An attach listener
// thread is created at startup or is created on-demand via a signal from
// the client tool. The attach listener creates a socket and binds it to a file
// in the filesystem. The attach listener then acts as a simple (single-
// threaded) server - it waits for a client to connect, reads the request,
// executes it, and returns the response to the client via the socket
// connection.
//
// As the socket is a UNIX domain socket it means that only clients on the
// local machine can connect. In addition there are two other aspects to
// the security:
// 1. The well known file that the socket is bound to has permission 400
// 2. When a client connect, the SO_PEERCRED socket option is used to
// obtain the credentials of client. We check that the effective uid
// of the client matches this process.
AttachListener クラス用の関数のうちで Linux に依存したものを納めた名前空間(AllStatic クラス) (See: here for details).
(このクラスが Unix domain socket を使った通信処理を AttachListener クラス本体から隠蔽している)
((cite: hotspot/src/os/linux/vm/attachListener_linux.cpp))
class LinuxAttachListener: AllStatic {
See: here for details
AttachOperation クラスの具象サブクラスの1つ (Linux 用の AttachOperation クラス).
((cite: hotspot/src/os/linux/vm/attachListener_linux.cpp))
class LinuxAttachOperation: public AttachOperation {
AttachOperation クラスのフィールドに加えて, client と通信するソケット用のフィールドを保持している (このクラスがソケットをカプセル化している).
((cite: hotspot/src/os/linux/vm/attachListener_linux.cpp))
// the connection to the client
int _socket;
See: here for details
LinuxAttachListener クラス内で使用される補助クラス(StackObjクラス).
client から受信したデータ中の引数を切り出す(パースする)処理を行う.
((cite: hotspot/src/os/linux/vm/attachListener_linux.cpp))
// Supporting class to help split a buffer into individual components
class ArgumentIterator : public StackObj {
LinuxAttachListener::read_request() 内で(のみ)使用されている (なお, LinuxAttachListener::read_request() は client から送られてきたデータを元に LinuxAttachOperation オブジェクトを生成する関数).
ArgumentIterator によるパース結果は ArgumentIterator::next() で取り出すことができる.
((cite: hotspot/src/os/linux/vm/attachListener_linux.cpp))
LinuxAttachOperation* LinuxAttachListener::read_request(int s) {
...
// parse request
ArgumentIterator args(buf, (max_len)-left);
// version already checked
char* v = args.next();
char* name = args.next();
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.