@@ -149,7 +149,6 @@ struct SysServer:
149149
150150 while True :
151151 var conn = self .ln.accept()
152- # while True:
153152 self .serve_connection(conn, handler)
154153
155154 fn serve_connection [T : HTTPService](inout self , conn : SysConnection, handler : T) raises -> None :
@@ -163,14 +162,14 @@ struct SysServer:
163162 Raises:
164163 If there is an error while serving the connection.
165164 """
166- var b = Bytes()
167- _ = conn.read(b)
168- if len (b) == 0 :
165+ var b = Bytes(capacity = default_buffer_size )
166+ var bytes_recv = conn.read(b)
167+ if bytes_recv == 0 :
169168 conn.close()
170169 return
171170
172- var buf = buffer.new_buffer(b)
173- var reader = Reader(buf)
171+ var buf = buffer.new_buffer(b^ )
172+ var reader = Reader(buf^ )
174173
175174 var error = Error()
176175
@@ -180,57 +179,67 @@ struct SysServer:
180179
181180 var req_number = 0
182181
183- # while True:
184- req_number += 1
182+ while True :
183+ req_number += 1
185184
186- var first_byte = reader.peek(1 )
187- if len (first_byte) == 0 :
188- error = Error(" Failed to read first byte from connection" )
189-
190- var header = RequestHeader()
191- var first_line_and_headers_len = 0
192- try :
193- first_line_and_headers_len = header.parse_raw(reader)
194- except e:
195- error = Error(" Failed to parse request headers: " + e.__str__ ())
196-
197- var uri = URI(self .address() + String(header.request_uri()))
198- try :
199- uri.parse()
200- except e:
201- error = Error(" Failed to parse request line:" + e.__str__ ())
202-
203- if header.content_length() > 0 :
204- if max_request_body_size > 0 and header.content_length() > max_request_body_size:
205- error = Error(" Request body too large" )
185+ if req_number > 1 :
186+ var b = Bytes(capacity = default_buffer_size)
187+ var bytes_recv = conn.read(b)
188+ if bytes_recv == 0 :
189+ conn.close()
190+ break
191+ buf = buffer.new_buffer(b^ )
192+ reader = Reader(buf^ )
193+
194+
195+ var first_byte = reader.peek(1 )
196+ if len (first_byte) == 0 :
197+ error = Error(" Failed to read first byte from connection" )
198+
199+ var header = RequestHeader()
200+ var first_line_and_headers_len = 0
201+ try :
202+ first_line_and_headers_len = header.parse_raw(reader)
203+ except e:
204+ error = Error(" Failed to parse request headers: " + e.__str__ ())
205+
206+ var uri = URI(self .address() + String(header.request_uri()))
207+ try :
208+ uri.parse()
209+ except e:
210+ error = Error(" Failed to parse request line:" + e.__str__ ())
211+
212+ if header.content_length() > 0 :
213+ if max_request_body_size > 0 and header.content_length() > max_request_body_size:
214+ error = Error(" Request body too large" )
215+
216+ var request = HTTPRequest(
217+ uri,
218+ Bytes(),
219+ header,
220+ )
221+
222+ try :
223+ request.read_body(reader, header.content_length(), first_line_and_headers_len, max_request_body_size)
224+ except e:
225+ error = Error(" Failed to read request body: " + e.__str__ ())
206226
207227 # var remaining_body = Bytes()
208228 # var remaining_len = header.content_length() - (len(request_body) + 1)
209229 # while remaining_len > 0:
210230 # var read_len = conn.read(remaining_body)
211231 # buf.extend(remaining_body)
212232 # remaining_len -= read_len
213-
214- var request = HTTPRequest(
215- uri,
216- Bytes(),
217- header,
218- )
219-
220- try :
221- request.read_body(reader, header.content_length(), first_line_and_headers_len, max_request_body_size)
222- except e:
223- error = Error(" Failed to read request body: " + e.__str__ ())
224-
225- var res = handler.func(request)
226-
227- # if not self.tcp_keep_alive:
228- _ = res.set_connection_close()
229-
230- var res_encoded = encode(res)
233+
234+ var res = handler.func(request)
235+
236+ if not self .tcp_keep_alive:
237+ _ = res.set_connection_close()
238+
239+ var res_encoded = encode(res)
231240
232- _ = conn.write(res_encoded)
241+ _ = conn.write(res_encoded)
233242
234- # if not self.tcp_keep_alive:
235- conn.close()
236- # break
243+ if not self .tcp_keep_alive:
244+ conn.close()
245+ return
0 commit comments