Просмотр исходного кода

Fixed receiving of a response to get the full message without crashing or hanging.

Christopher Luu 11 лет назад
Родитель
Сommit
d9a75c783a
1 измененных файлов с 8 добавлено и 4 удалено
  1. 8 4
      Swifter/HttpParser.swift

+ 8 - 4
Swifter/HttpParser.swift

@@ -32,7 +32,7 @@ class HttpParser {
                     }
                     responseString += line
                 }
-				NSLog(responseString)
+				println(responseString)
 				let responseData = responseString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
                 return (path, method, headers, responseData)
             }
@@ -66,10 +66,14 @@ class HttpParser {
     var recvBufferOffset: Int = 0
     
     func nextUInt8(socket: CInt) -> Int {
-        if ( recvBufferSize == 0 ) {
+        if ( recvBufferSize == 0 || recvBufferOffset == recvBuffer.count ) {
             recvBufferOffset = 0
-            recvBufferSize = recv(socket, &recvBuffer, UInt(recvBuffer.count), MSG_EOF)
+            recvBufferSize = recv(socket, &recvBuffer, UInt(recvBuffer.count), MSG_DONTWAIT)
             if ( recvBufferSize <= 0 ) { return recvBufferSize }
+			if recvBufferSize < recvBuffer.count
+			{
+				recvBuffer[recvBufferSize] = 0
+			}
         }
         let returnValue = recvBuffer[recvBufferOffset]
         recvBufferOffset++
@@ -82,7 +86,7 @@ class HttpParser {
         do {
             n = nextUInt8(socket)
             if ( n > 13 /* CR */ ) { characters.append(Character(UnicodeScalar(n))) }
-        } while ( n > 0 && n != 10 /* NL */);
+        } while ( n > 0 && n != 10 /* NL */)
         if ( n == -1 && characters.isEmpty ) {
             if error != nil { error.memory = Socket.socketLastError("recv(...) failed.") }
             return nil