2

Powershell を使用して単純な TCP/IP サーバーを作成しています。Ctrl-C が AcceptTcpClient() 呼び出しを中断できないことに気付きました。ただし、呼び出し後に Ctrl-C は正常に機能します。私は周りを検索しましたが、これまでに同様の問題を報告した人はいません。

この問題は、次の単純なコードで繰り返すことができます。Powershell ISE ではなく、ネイティブの Powershell ターミナルで Windows 10 の最新のパッチを使用しています。

$listener=new-object System.Net.Sockets.TcpListener([system.net.ipaddress]::any, 4444)
$listener.start()
write-host "listener started at port 4444"
$tcpConnection = $listener.AcceptTcpClient()
write-host "accepted a client"

実行するとこうなります

ps1> .\test_ctrl_c.ps1
listener started at port 4444
(Ctrl-C doesn't work here)
4

2 に答える 2

2

@mklement0 の回答を得た後、元のきれいなコードをあきらめました。回避策を見つけました。Ctrl-C でプログラムを中断できるようになりました

$listener=new-object System.Net.Sockets.TcpListener([system.net.ipaddress]::any, 4444)
$listener.start()
write-host "listener started at port 4444"
while ($true) {
   if ($listener.Pending()) {
      $tcpConnection = $listener.AcceptTcpClient()
      break;
   }
   start-sleep -Milliseconds 1000
}
write-host "accepted a client"

Ctrl-C が機能するようになりました

ps1> .\test_ctrl_c.ps1
listener started at port 4444
(Ctrl-C works here)
于 2020-03-28T18:30:29.233 に答える