非ブロッキングluasocketクライアントが接続を失ったかどうかを確認するにはどうすればよいですか?

アロン

TCP接続を介してProPresenter(別のプログラム)からデータを継続的に受信するOBS用のLuaスクリプトを書いています。LuaSocketライブラリを使用して接続し、期待どおりにデータを取得します。

問題は、ProPresenterを閉じると、luasocketタイムアウトを0に設定しているときに接続が閉じられたことをスクリプトに登録できないことです(非ブロッキング接続にするため)。スクリプトを常にノンブロッキングにする必要があります。そうしないと、すべてのOBSが停止し、フレームレートが1を下回ります...

ただし、タイムアウトをたとえばに設定した場合。1秒後、luasocketは接続が問題なく閉じられたことを登録します。この例によれば、タイムアウトが0の場合にも機能するはずです。しかし、明らかにそうではなく、例ではLuasocketの古いバージョンを使用しており、最新バージョンが変更されている可能性があるためだと思います。

これが私のコードです:

接続がタイムアウトするためにデュオを閉じたことを登録しません:

function recv_and_process_data()
    local data 

    data, err, partial = s:receive()

    if data ~= nil then
        --process the recieved data. This part works.
    elseif err == "closed" then
        --doesn't get here because of timeout...
        --inform script that the connection has closed
    elseif err == "timeout" then
        --goes here as soon as ProPresenter is closed
        print(err .. " partial: " .. partial) 
    end
end

接続が閉じたときに登録しますが、OBSをストールさせます。

function recv_and_process_data()
    local data 

    s:settimeout(1) --timeout set to 1 second
    data, err, partial = s:receive()
    s:settimeout(0)

    if data ~= nil then
        --process the recieved data. This part works.
    elseif err == "closed" then
        --goes here when ProPresenter is closed
        --inform script that the connection has closed
    elseif err == "timeout" then
        print(err .. " partial: " .. partial)
    end
end

これも機能しません(ここで提案されているように):

function recv_and_process_data()
    local data 

    data, err, partial = s:receive(0)
    if err == "closed" then
        print(err .. " partial: " .. partial)
    end
end

これを機能させることができない場合は、ProPresentersサーバーがまだ実行されているかどうかを確認するために再接続を試みる必要があると思います。

ジェームズワシントン

私もこの問題を理解しようとしていました。非常に小さいsettimeout()値でも、使用できるエラーが返されますが、プログラムはまったく保持されないことがわかりました。

私が使う local Data, Error = Client:settimeout(0.0001)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ElasticSearchクライアントが接続されているかどうかを確認するにはどうすればよいですか?

分類Dev

iOSまたはmacOSでアクティブなインターネット接続を確認するにはどうすればよいですか?

分類Dev

gitブランチにトラッキングブランチがあるかどうかを確認するにはどうすればよいですか?

分類Dev

gitブランチにトラッキングブランチがあるかどうかを確認するにはどうすればよいですか?

分類Dev

クライアントが接続しているサーバーのIPを確認するにはどうすればよいですか?出来ますか?

分類Dev

トラフィックがVPNにログインしているかどうかを確認するにはどうすればよいですか

分類Dev

SpringでSFTP接続が成功したかどうかを確認する方法(トライキャッチ付き)?SpringでSFTP接続を確認するには、どのライブラリを使用すればよいですか?

分類Dev

MySQLクライアントが使用する接続方法を確認するにはどうすればよいですか?

分類Dev

コマンドラインからスワップがアクティブかどうかを確認するにはどうすればよいですか?

分類Dev

mqttブローカーとの接続が失われたかどうかを確認するにはどうすればよいですか?

分類Dev

Javaでインターネット接続が存在するかどうかを確認するにはどうすればよいですか?

分類Dev

ソケット接続が機能してバッファリングしているかどうか、またはリクエストが正しくないかどうかを確認するにはどうすればよいですか?

分類Dev

キーボードが接続されているかどうかをプログラムで確認するにはどうすればよいですか?

分類Dev

Office 365監査ログでログインが失敗したかどうかを確認するにはどうすればよいですか?

分類Dev

タグをサブスクライブした後、PLC接続が失われたかどうかを確認するにはどうすればよいですか?

分類Dev

WordPress W3 Total Cacheプラグインがアクティブかどうかを確認するにはどうすればよいですか?

分類Dev

テーブルに列ストアインデックスがあるかどうかを確認するにはどうすればよいですか?

分類Dev

ブレークポイントが特定の順序でヒットしたかどうかを確認するにはどうすればよいですか?

分類Dev

キャストによってターゲットタイプのオーバーフローまたはアンダーフローが発生するかどうかを確認するにはどうすればよいですか?

分類Dev

MacとLinuxでセキュアブートが有効または無効になっているかどうかをコマンドラインで確認するにはどうすればよいですか?

分類Dev

インターネット接続を確認するにはどうすればよいですか?アンドロイド

分類Dev

Firebase認証によって送信された確認リンクを最初にクリックしない場合、ユーザーがAndroidアプリにログインできないようにするにはどうすればよいですか?

分類Dev

最後のシャットダウンがクリーンであったかどうかを確認するにはどうすればよいですか?

分類Dev

電話がwifiで接続されているか、C#経由でモバイルインターネットにアクセスできるかどうかを確認するにはどうすればよいですか?

分類Dev

ドキュメントがluceneインデックスに存在するかどうかを確認するにはどうすればよいですか?

分類Dev

自動ログインがWebBrowserコントロールで機能したかどうかを確認するにはどうすればよいですか?

分類Dev

wxPythonイベントハンドラーでShiftキーが押されたかどうかを確認するにはどうすればよいですか?

分類Dev

接続が中断された後にNFSクライアントをリセットするにはどうすればよいですか?

分類Dev

Xtendアクティブアノテーションプロセッサによって生成されたJava出力に必要なインポートが含まれていることを確認するにはどうすればよいですか?

Related 関連記事

  1. 1

    ElasticSearchクライアントが接続されているかどうかを確認するにはどうすればよいですか?

  2. 2

    iOSまたはmacOSでアクティブなインターネット接続を確認するにはどうすればよいですか?

  3. 3

    gitブランチにトラッキングブランチがあるかどうかを確認するにはどうすればよいですか?

  4. 4

    gitブランチにトラッキングブランチがあるかどうかを確認するにはどうすればよいですか?

  5. 5

    クライアントが接続しているサーバーのIPを確認するにはどうすればよいですか?出来ますか?

  6. 6

    トラフィックがVPNにログインしているかどうかを確認するにはどうすればよいですか

  7. 7

    SpringでSFTP接続が成功したかどうかを確認する方法(トライキャッチ付き)?SpringでSFTP接続を確認するには、どのライブラリを使用すればよいですか?

  8. 8

    MySQLクライアントが使用する接続方法を確認するにはどうすればよいですか?

  9. 9

    コマンドラインからスワップがアクティブかどうかを確認するにはどうすればよいですか?

  10. 10

    mqttブローカーとの接続が失われたかどうかを確認するにはどうすればよいですか?

  11. 11

    Javaでインターネット接続が存在するかどうかを確認するにはどうすればよいですか?

  12. 12

    ソケット接続が機能してバッファリングしているかどうか、またはリクエストが正しくないかどうかを確認するにはどうすればよいですか?

  13. 13

    キーボードが接続されているかどうかをプログラムで確認するにはどうすればよいですか?

  14. 14

    Office 365監査ログでログインが失敗したかどうかを確認するにはどうすればよいですか?

  15. 15

    タグをサブスクライブした後、PLC接続が失われたかどうかを確認するにはどうすればよいですか?

  16. 16

    WordPress W3 Total Cacheプラグインがアクティブかどうかを確認するにはどうすればよいですか?

  17. 17

    テーブルに列ストアインデックスがあるかどうかを確認するにはどうすればよいですか?

  18. 18

    ブレークポイントが特定の順序でヒットしたかどうかを確認するにはどうすればよいですか?

  19. 19

    キャストによってターゲットタイプのオーバーフローまたはアンダーフローが発生するかどうかを確認するにはどうすればよいですか?

  20. 20

    MacとLinuxでセキュアブートが有効または無効になっているかどうかをコマンドラインで確認するにはどうすればよいですか?

  21. 21

    インターネット接続を確認するにはどうすればよいですか?アンドロイド

  22. 22

    Firebase認証によって送信された確認リンクを最初にクリックしない場合、ユーザーがAndroidアプリにログインできないようにするにはどうすればよいですか?

  23. 23

    最後のシャットダウンがクリーンであったかどうかを確認するにはどうすればよいですか?

  24. 24

    電話がwifiで接続されているか、C#経由でモバイルインターネットにアクセスできるかどうかを確認するにはどうすればよいですか?

  25. 25

    ドキュメントがluceneインデックスに存在するかどうかを確認するにはどうすればよいですか?

  26. 26

    自動ログインがWebBrowserコントロールで機能したかどうかを確認するにはどうすればよいですか?

  27. 27

    wxPythonイベントハンドラーでShiftキーが押されたかどうかを確認するにはどうすればよいですか?

  28. 28

    接続が中断された後にNFSクライアントをリセットするにはどうすればよいですか?

  29. 29

    Xtendアクティブアノテーションプロセッサによって生成されたJava出力に必要なインポートが含まれていることを確認するにはどうすればよいですか?

ホットタグ

アーカイブ