0

matlab の Java ソケットを使用して、以下のようなコードがいくつかあります。ただし、ソリューションがmatlab固有である必要はないと思います...

問題: ソケットが server_socket.close によって閉じられる前に debug-quit を押すと、ソケットがぶら下がっている/開いたままになります。うまくいくと思われる唯一の回避策は、matlab を停止して再起動することです。これにより、バックグラウンド ソケットが強制終了されると思います。この関数によって ServerSocket が開いたままになっている場合、どうすればより一般的に ServerSocket を閉じることができますか?

function server_socket = my_server( opts ) 
    % Run the server, my_server.m
    import java.net.ServerSocket
    import java.io.*
    server_socket = ServerSocket(6001);
        server_socket.setSoTimeout(5000);
        io_socket = server_socket.accept(); 
        fprintf(1, 'Client connected\n');
          % DO STUFF 1
          BreakPointHere = 1; 
          % DO STUFF 2
        % clean up
        server_socket.close; % badness if 'dbquit' before this
        io_socket.close;

end

これについてグーグルで調べてみましたが、使用するキーワードがよくわかりません.Javaソケットに関しては情報が過負荷です...

編集: 1 つの解決策は、これを関数ではなくスクリプトにすることです (つまり、最初の行と最後の 'end' を削除します)。そうすれば、debug kill 後も server_socket が持続します。しかし、ソケットが処理される場所をよりよく理解したいと思っており、他のすべての変数が必ずしも永続化されることを望んでいません。

4

0 に答える 0