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 が持続します。しかし、ソケットが処理される場所をよりよく理解したいと思っており、他のすべての変数が必ずしも永続化されることを望んでいません。