QLocalServer Class
QLocalServer クラスは、ローカル・ソケット・ベースのサーバーを提供します。詳細...
Header: | #include <QLocalServer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
Inherits: | QObject |
パブリックタイプ
enum | SocketOption { NoOptions, UserAccessOption, GroupAccessOption, OtherAccessOption, WorldAccessOption, AbstractNamespaceOption } |
flags | SocketOptions |
プロパティ
- socketOptions : SocketOptions
パブリック関数
QLocalServer(QObject *parent = nullptr) | |
virtual | ~QLocalServer() |
QBindable<QLocalServer::SocketOptions> | bindableSocketOptions() |
void | close() |
QString | errorString() const |
QString | fullServerName() const |
virtual bool | hasPendingConnections() const |
bool | isListening() const |
bool | listen(const QString &name) |
bool | listen(qintptr socketDescriptor) |
(since 6.3) int | listenBacklogSize() const |
int | maxPendingConnections() const |
virtual QLocalSocket * | nextPendingConnection() |
QAbstractSocket::SocketError | serverError() const |
QString | serverName() const |
(since 6.3) void | setListenBacklogSize(int size) |
void | setMaxPendingConnections(int numConnections) |
void | setSocketOptions(QLocalServer::SocketOptions options) |
qintptr | socketDescriptor() const |
QLocalServer::SocketOptions | socketOptions() const |
bool | waitForNewConnection(int msec = 0, bool *timedOut = nullptr) |
シグナル
void | newConnection() |
静的パブリックメンバ
bool | removeServer(const QString &name) |
プロテクト関数
(since 6.8) void | addPendingConnection(QLocalSocket *socket) |
virtual void | incomingConnection(quintptr socketDescriptor) |
詳細説明
このクラスは、着信ローカルソケット接続を受け付けることができるようにします。
listen() を呼び出すと、サーバは指定されたキーで着信コネクションのリッスンを開始します。その後、クライアントがサーバに接続するたびにnewConnection() シグナルが発行されます。
nextPendingConnection() を呼び出すと、保留中の接続がQLocalSocket に接続されたことになる。この関数は、クライアントとの通信に使用できるQLocalSocket へのポインタを返す。
エラーが発生した場合、serverError() はエラーのタイプを返し、errorString() を呼び出すと、何が発生したかを人間が読める形で説明することができる。
接続をリッスンしている場合、サーバーがリッスンしている名前はserverName() から取得できる。
close() を呼び出すと、QLocalServer は着信接続のリッスンを停止します。
QLocalServerはイベント・ループと共に使用するように設計されていますが、イベント・ループなしで使用することも可能です。その場合、waitForNewConnection() を使用する必要があります。 () は、接続が利用可能になるか、タイムアウトが終了するまでブロックします。
QLocalSocket およびQTcpServerも参照のこと 。
メンバ型ドキュメント
enum QLocalServer::SocketOption
flags QLocalServer::SocketOptions
この enum は、ソケットを作成する際に使用可能なオプションを記述します。ソケットのアクセスパーミッションをサポートするプラットフォーム(Linux, Windows)でのアクセスパーミッションを変更する。GroupAccess と OtherAccess は、プラットフォームによって意味が若干異なります。LinuxやAndroidでは、抽象アドレスのソケットを使用することができます。このようなソケットでは、ソケットパーミッションは意味を持ちません。
定数 | 値 | 説明 |
---|---|---|
QLocalServer::NoOptions | 0x0 | アクセス制限が設定されていない。 |
QLocalServer::UserAccessOption | 0x01 | ソケットを作成したプロセスと同じユーザにアクセスが制限されている。 |
QLocalServer::GroupAccessOption | 0x2 | Linux では、ソケットを作成したユーザではなく、同じグループにアクセスが制限されている。アクセスはプロセスのプライマリグループに制限されている(Windows) |
QLocalServer::OtherAccessOption | 0x4 | Linux では、ソケットを作成したユーザとグループ以外の全員がアクセスできる。Windows では誰でもアクセスできる。 |
QLocalServer::WorldAccessOption | 0x7 | アクセス制限なし。 |
QLocalServer::AbstractNamespaceOption | 0x8 | リスニングソケットは抽象名前空間に作成される。このフラグは Linux 固有のものである。他のプラットフォームの場合、コードの移植性のために、このフラグは WorldAccessOption と等価である。 |
SocketOptions型はQFlags<SocketOption>のtypedefである。これは SocketOption 値の OR の組み合わせを格納します。
socketOptionsも参照してください 。
プロパティのドキュメント
[bindable]
socketOptions : SocketOptions
注意: このプロパティはQProperty バインディングに対応している。
このプロパティは、ソケットの動作を制御するソケットオプションを保持する。
例えば、ソケットに接続できるユーザ ID を制限することができる。
これらのオプションはlisten() を呼び出す前に設定する必要がある。
Linux の Unix ドメインソケットのように、ソケットへのアクセスはファイルシステムのパーミッションによって決定され、 umask に基づいて生成される場合もある。アクセスフラグの設定はこれを上書きし、指定されたとおりにアクセスを制限または許可する。
macOSのような他のUnixベースのオペレーティングシステムでは、Unixドメインソケットのファイルパーミッションは尊重されず、デフォルトではWorldAccessであり、これらのパーミッションフラグは影響しない。
Windowsでは、UserAccessOption 、同じユーザーが実行する昇格プロセスによって作成されたローカルサーバーに、昇格していないプロセスが接続できるようにするには十分である。GroupAccessOption 、プロセスのプライマリグループを参照する(WindowsドキュメントのTokenPrimaryGroupを参照)。OtherAccessOption 、よく知られている「Everyone」グループを参照する。
Linuxプラットフォームでは、ファイルシステムから独立した抽象名前空間にソケットを作成することができる。この種のソケットを使用すると、パーミッションオプションを無視することになる。他のプラットフォームでは、AbstractNamespaceOption はWorldAccessOption と等価である。
デフォルトではどのフラグも設定されておらず、アクセス許可はプラットフォームのデフォルトである。
listen()も参照のこと 。
メンバ関数ドキュメント
[explicit]
QLocalServer::QLocalServer(QObject *parent = nullptr)
与えられたparent で新しいローカルソケットサーバを作成する。
listen()も参照 。
[virtual noexcept]
QLocalServer::~QLocalServer()
QLocalServer オブジェクトを破棄する。サーバーが接続をリッスンしている場合、自動的にクローズされる。
まだ接続しているクライアントQLocalSocketは、サーバーが削除される前に接続を切断するか、再接続する必要があります。
close()も参照のこと 。
[protected, since 6.8]
void QLocalServer::addPendingConnection(QLocalSocket *socket)
この関数はQLocalServer::incomingConnection() から呼び出され、保留中の着信接続リストにsocket を追加する。
注意: 接続保留の仕組みを壊したくない場合は、再実装されたincomingConnection() からこのメンバを呼び出すことを忘れないこと。この関数は、ソケットが追加された後にnewConnection() シグナルを発行する。
この関数は Qt 6.8 で導入されました。
incomingConnection() とnewConnection()も参照して ください。
void QLocalServer::close()
着信コネクションのリッスンを停止します。既存の接続は影響を受けませんが、新しい接続は拒否されます。
isListening() およびlisten()も参照して ください。
QString QLocalServer::errorString() const
serverError() が報告した現在のエラーに対応する、人間が読めるメッセージを返します。適切な文字列がない場合は、空の文字列が返されます。
serverError()も参照 。
QString QLocalServer::fullServerName() const
サーバがリッスンしているフル・パスを返します。
注意: これはプラットフォーム固有のものです。
listen() およびserverName()も参照 。
[virtual]
bool QLocalServer::hasPendingConnections() const
サーバが保留中の接続を持っている場合はtrue
を返し、そうでない場合はfalse
を返す。
nextPendingConnection() およびsetMaxPendingConnections() も参照 。
[virtual protected]
void QLocalServer::incomingConnection(quintptr socketDescriptor)
この仮想関数は、新しい接続が利用可能になったときにQLocalServer から呼び出される。socketDescriptor は、受け付けた接続のネイティブソケットディスクリプタである。
基本実装では、QLocalSocket を生成し、ソケットディスクリプタを設定し、保留中の接続の内部リストにQLocalSocket を格納する。最後にnewConnection() が発行される。
この関数を再実装して、接続が可能になったときのサーバーの動作を変更する。
newConnection()、nextPendingConnection()、QLocalSocket::setSocketDescriptor()も参照のこと 。
bool QLocalServer::isListening() const
サーバが着信接続をリッスンしている場合はtrue
を返し、そうでない場合は false を返します。
bool QLocalServer::listen(const QString &name)
name で着信接続を待ち受けるようにサーバに指示します。サーバがリッスン中の場合は false を返します。成功した場合はtrueを返し、そうでない場合はfalseを返します。
name には単一の名前を指定でき、 がプラットフォーム固有の正しいパスを決定します。() は listen に渡された名前を返します。QLocalServer serverName
通常は "foo "のような名前を渡しますが、Unixでは"/tmp/foo "のようなパス、Windowsでは"˶.˶pipefoo "のようなパイプパスにすることもできます。
注意: Unixの場合、サーバーが閉じずにクラッシュすると、AddressInUseErrorでlistenが失敗します。新しいサーバーを作成するには、このファイルを削除する必要があります。Windowsでは、2つのローカル・サーバーが同時に同じパイプをリッスンできるが、接続はどちらかのサーバーに送られる。
serverName(),isListening(),close()も参照のこと 。
bool QLocalServer::listen(qintptr socketDescriptor)
socketDescriptor で着信接続をリッスンするようにサーバに指示します。このプロパティは、サーバが現在リッスン中であればfalse
を返します。成功するとtrue
を返し、失敗するとfalse
を返す。ソケットは新しい接続を受け付ける準備ができていなければならない。ソケットはノンブロッキングモードに設定される。
serverName QString(),fullServerName() は、このオプションがプラットフォームでサポートされている場合、名前の文字列を返すことができる。
isListening() およびclose()も参照のこと 。
[since 6.3]
int QLocalServer::listenBacklogSize() const
接続を受け付ける予定のバックログキューのサイズを返します。
この関数は Qt 6.3 で導入されました。
setListenBacklogSize()も参照して ください。
int QLocalServer::maxPendingConnections() const
保留中の接続の最大数を返します。デフォルトは 30 です。
setMaxPendingConnections() およびhasPendingConnections() も参照して ください。
[signal]
void QLocalServer::newConnection()
このシグナルは、新しい接続が利用可能になるたびに発行されます。
hasPendingConnections() およびnextPendingConnection() も参照 。
[virtual]
QLocalSocket *QLocalServer::nextPendingConnection()
保留中の次の接続を、接続済みのQLocalSocket オブジェクトとして返す。
ソケットはサーバの子として生成されるので、QLocalServer オブジェクトが破棄されると自動的に削除される。メモリの浪費を避けるために、オブジェクトを使い終わったら明示的に削除するのは良いアイデアである。
nullptr
保留中の接続がないときにこの関数がコールされた場合は、この関数が返されます。
hasPendingConnections()、newConnection()、incomingConnection()も参照 。
[static]
bool QLocalServer::removeServer(const QString &name)
listen() の呼び出しに失敗する原因となるサーバ・インスタンスを削除し、成功した場合はtrue
を返し、失敗した場合はfalse
を返す。この関数は、以前のサーバ・インスタンスがクリーンアップされていない場合に、クラッシュから回復するためのものである。
Windowsでは、この関数は何もしない。Unixでは、name で指定されたソケットファイルを削除する。
警告 実行中のインスタンスのソケットを削除しないように注意すること。
QAbstractSocket::SocketError QLocalServer::serverError() const
最後に発生したエラーの種類またはNoError を返す。
errorString()も参照のこと 。
QString QLocalServer::serverName() const
サーバが接続をリッスンしている場合はサーバ名を返し、そうでない場合は QString() を返す。
listen() およびfullServerName() も参照 。
[since 6.3]
void QLocalServer::setListenBacklogSize(int size)
受け付ける接続のバックログキューサイズをsize に設定します。 オペレーティングシステムは、この値を小さくしたり無視したりするかもしれません。デフォルトでは、キューのサイズは 50 です。
注意: このプロパティは、listen() を呼び出す前に設定する必要があります。
この関数はQt 6.3で導入されました。
listenBacklogSize()も参照してください 。
void QLocalServer::setMaxPendingConnections(int numConnections)
numConnections QLocalServer は、 () が呼び出される前に、 を超える着信接続を受け付けません。nextPendingConnection numConnections
注意:QLocalServer が保留中のコネクションの最大数に達した後、新しいコネクションの 受け付けを停止しても、オペレーティングシステムはコネクションをキューに 保留する可能性がある。
maxPendingConnections() およびhasPendingConnections()も参照のこと 。
qintptr QLocalServer::socketDescriptor() const
ソケットディスクリプタ サーバーが着信指示を待ち受けるために使用するネイティブソケットディスクリプタを返す。
ディスクリプタの型はプラットフォームに依存する:
- Windows の場合、返される値はWinsock 2 ソケットハンドルである。
- INTEGRITY の場合、戻り値はQTcpServer ソケットディスクリプタであり、型はsocketDescriptor で定義される。
- 他の全ての UNIX 系オペレーティングシステムでは、型はリスニングソケットを表すファイル記述子である。
listen()も参照のこと 。
QLocalServer::SocketOptions QLocalServer::socketOptions() const
ソケットに設定されているソケットオプションを返す。
注: プロパティ socketOptions のゲッター関数。
setSocketOptions() も参照 。
bool QLocalServer::waitForNewConnection(int msec = 0, bool *timedOut = nullptr)
最大msec ミリ秒、または着信接続が可能になるまで待つ。接続があればtrue
を返し、なければfalse
を返す。操作がタイムアウトし、timedOut がnullptr
でない場合、 *timedOut に true が設定される。
これはブロッキング関数呼び出しである。waitForNewConnection()は、利用可能なイベント・ループがない場合に主に有用である。
ノンブロッキングの代替手段は、newConnection ()シグナルに接続することである。
msec が -1 の場合、この関数はタイムアウトしない。
hasPendingConnections() およびnextPendingConnection()も参照して ください。
©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。