OSDN Git Service

データを取りこぼすことがあるのを直す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Mon, 12 Feb 2018 07:29:23 +0000 (16:29 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Mon, 12 Feb 2018 07:31:59 +0000 (16:31 +0900)
KancolleSniffer/HttpProxy.cs

index a8f12ac..e738670 100644 (file)
@@ -121,9 +121,8 @@ namespace KancolleSniffer
                     ReceiveResponse();\r
                     if (_session.Response.StatusCode == null)\r
                         return;\r
-                    SendResponse();\r
-                    Close();\r
                     AfterSessionComplete?.Invoke(_session);\r
+                    SendResponse();\r
                 }\r
 #if DEBUG\r
                 catch (Exception e)\r
@@ -159,8 +158,8 @@ namespace KancolleSniffer
             private void SendRequest()\r
             {\r
                 _server = ConnectServer();\r
-                _serverStream = new HttpStream(_server).\r
-                    WriteLines(_session.Request.RequestLine + _session.Request.ModifiedHeaders);\r
+                _serverStream =\r
+                    new HttpStream(_server).WriteLines(_session.Request.RequestLine + _session.Request.ModifiedHeaders);\r
             }\r
 \r
             private void SendRequestBody()\r
@@ -279,10 +278,31 @@ namespace KancolleSniffer
 \r
             private void Close()\r
             {\r
-                _serverStream?.Close();\r
-                _clientStream?.Close();\r
-                _server?.Close();\r
-                _client.Close();\r
+                SocketClose(_server);\r
+                SocketClose(_client);\r
+            }\r
+\r
+            private void SocketClose(Socket socket)\r
+            {\r
+                if (socket == null)\r
+                    return;\r
+                try\r
+                {\r
+                    socket.Shutdown(SocketShutdown.Both);\r
+                }\r
+                // ReSharper disable EmptyGeneralCatchClause\r
+                catch\r
+\r
+                {\r
+                }\r
+                try\r
+                {\r
+                    socket.Close();\r
+                }\r
+                catch\r
+                    // ReSharper restore EmptyGeneralCatchClause\r
+                {\r
+                }\r
             }\r
         }\r
 \r
@@ -615,12 +635,6 @@ namespace KancolleSniffer
                     offset += n;\r
                 } while (count > 0);\r
             }\r
-\r
-            public HttpStream Close()\r
-            {\r
-                _socket.Close();\r
-                return this;\r
-            }\r
         }\r
     }\r
 }
\ No newline at end of file