とあるテストで、かつ1回目にしか発生しないエラーに遭遇したメモ
.NET Coreも内部ではSocketを使ってるわけで、以下のようなエラーが起きることがあるようです。
https://support.microsoft.com/ja-jp/kb/819124
今回遭遇したものは、
WSA_OPERATION_ABORTED (オペレーティング システムに依存)
- 意味 : 重複した操作が取り消されました。
- 説明 : ソケットが閉じているか、WSAIoctl (Wsapiref_6ik2.asp) の SIO_FLUSH コマンドが実行されたため、重複した操作が取り消されました。
でした。先のログ出力をしていってわかったことでした。
というのもこのエラー、デバッグで実行しても発生しない。
Consoleとして起動しても発生しない。
ので、実際に使う上では問題なさそうなものでした。
ただ、テストコードのようにmsで動く世界だとどうしてもシビアなのかなぁというところで、一つ一つトレースしてました。
[14:18:19.7113][ 21][0][Info] ExecProcess: outputLength6087 [14:18:19.7123][ 21][0][Info] HttpResponseBody.Set Length=6060 [14:18:19.7123][ 21][0][Info] CgiHandler.CreateFromCgi [14:18:19.7133][ 21][0][Info] WebServer.OnSubThread SEND [14:18:19.7143][ 21][0][Info] 33768781 SockTcp.Send 31 [14:18:19.7143][ 16][0][Info] Detail Web-localhost:7188 ::1 0000004 response HTTP/1.1 200 Document follows [14:18:19.7143][ 27][0][Info] 55071656 SockTcp.EndReceive Length=31 [14:18:19.7143][ 27][0][Info] 55071656 SockTcp.BeginReceive [14:18:19.7143][ 4][0][Info] 55071656 SockTcp.LineRecv 31 [14:18:19.7163][ 28][0][Erro] 55071656 SockTcp.EndReceive Result.SocketErrorCode:OperationAborted [14:18:19.7163][ 28][0][Erro] 55071656 SockTcp.EndReceive Result.ExceptionType:System.Net.Sockets.SocketException [14:18:19.7163][ 28][0][Erro] 55071656 SockTcp.EndReceive Result.ExceptionMessage:スレッドの終了またはアプリケーションの要求によって、I/O 処理は中止されました。 [14:18:19.7163][ 28][0][Erro] 55071656 SockTcp.EndReceive Result.ExceptionMessage:One or more errors occurred. (スレッドの終了またはアプリケーションの要求によって、I/O 処理は中止されました。) [14:18:19.7163][ 28][0][Erro] 55071656 SockTcp.EndReceive Result.StackTrace: [14:18:19.7163][ 28][0][Erro] SockTcp.SetError 55071656 SockTcp.disconnect [14:18:19.7173][ 21][0][Info] 33768781 SockTcp.SendNoTrace 173 [14:18:19.7183][ 21][0][Info] HttpResponseBody.Send encode=True [14:18:19.7183][ 21][0][Info] 33768781 SockTcp.SendNoTrace 6060
という具合に、問題の箇所は突如として、謎のエラーが出てるというところです。
これを、SocketExceptionとしてキャスト、エラーコードを調べてみたところ上のエラーにいきついたというころでした。
この「OPERATION_ABORTED」というのは、Socketそのものが切断されたためのものではないため、再度受信待機に入ることで対策しました。