RpcHeaderBoundedServerSocket class final
A ServerSocket for an HttpServer that bounds what a connection may send before its request header block ends, and how many connections are open.
dart:io holds an unfinished request header block below every rpc_dart
limit, for as long as the client keeps the connection open. Through
HttpServer.listenOn(socket), a connection whose header block passes
maxHeaderBytes or takes longer than headerTimeout is closed, and one
accepted past maxConnections is closed at once.
headerTimeout runs from the accept for the first request. A server that keeps connections alive calls responseWritten once a response is out: the next request's block is then bounded again, due from its first byte. A server that upgrades the connection never calls it, so only the first block is bounded and the bytes after it belong to the upgraded protocol.
peerGone tells a handler that its client hung up: HTTP/1.1 has no cancel frame, and neither dart:io nor shelf reports a closed connection.
- Inheritance
- Implemented types
Constructors
- RpcHeaderBoundedServerSocket(ServerSocket server, {int? maxHeaderBytes, Duration? headerTimeout, int? maxConnections})
-
Bounds the connections
serveraccepts. Each bound is off when null.
Properties
- address → InternetAddress
-
The address used by this socket.
no setteroverride
-
first
→ Future<
Socket> -
The first element of this stream.
no setterinherited
- hashCode → int
-
The hash code for this object.
no setterinherited
- headerTimeout → Duration?
-
How long a request's header block may take, or null.
final
- isBroadcast → bool
-
Whether this stream is a broadcast stream.
no setterinherited
-
isEmpty
→ Future<
bool> -
Whether this stream contains any elements.
no setterinherited
-
last
→ Future<
Socket> -
The last element of this stream.
no setterinherited
-
length
→ Future<
int> -
The number of elements in this stream.
no setterinherited
- maxConnections → int?
-
Open connections at most, or null.
final
- maxHeaderBytes → int?
-
Bytes a request may send before its header block ends, or null.
final
- port → int
-
The port used by this socket.
no setteroverride
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
-
single
→ Future<
Socket> -
The single element of this stream.
no setterinherited
Methods
-
any(
bool test(Socket element)) → Future< bool> -
Checks whether
testaccepts any element provided by this stream.inherited -
asBroadcastStream(
{void onListen(StreamSubscription< Socket> subscription)?, void onCancel(StreamSubscription<Socket> subscription)?}) → Stream<Socket> -
Returns a multi-subscription stream that produces the same events as this.
inherited
-
asyncExpand<
E> (Stream< E> ? convert(Socket event)) → Stream<E> -
Transforms each element into a sequence of asynchronous events.
inherited
-
asyncMap<
E> (FutureOr< E> convert(Socket event)) → Stream<E> -
Creates a new stream with each data event of this stream asynchronously
mapped to a new event.
inherited
-
cast<
R> () → Stream< R> -
Adapt this stream to be a
Stream<R>.inherited -
close(
) → Future< ServerSocket> -
Closes the socket.
override
-
contains(
Object? needle) → Future< bool> -
Returns whether
needleoccurs in the elements provided by this stream.inherited -
distinct(
[bool equals(Socket previous, Socket next)?]) → Stream< Socket> -
Skips data events if they are equal to the previous data event.
inherited
-
drain<
E> ([E? futureValue]) → Future< E> -
Discards all data on this stream, but signals when it is done or an error
occurred.
inherited
-
elementAt(
int index) → Future< Socket> -
Returns the value of the
indexth data event of this stream.inherited -
every(
bool test(Socket element)) → Future< bool> -
Checks whether
testaccepts all elements provided by this stream.inherited -
expand<
S> (Iterable< S> convert(Socket element)) → Stream<S> -
Transforms each element of this stream into a sequence of elements.
inherited
-
firstWhere(
bool test(Socket element), {Socket orElse()?}) → Future< Socket> -
Finds the first element of this stream matching
test.inherited -
fold<
S> (S initialValue, S combine(S previous, Socket element)) → Future< S> -
Combines a sequence of values by repeatedly applying
combine.inherited -
forEach(
void action(Socket element)) → Future< void> -
Executes
actionon each element of this stream.inherited -
handleError(
Function onError, {bool test(dynamic error)?}) → Stream< Socket> -
Creates a wrapper Stream that intercepts some errors from this stream.
inherited
-
join(
[String separator = ""]) → Future< String> -
Combines the string representation of elements into a single string.
inherited
-
lastWhere(
bool test(Socket element), {Socket orElse()?}) → Future< Socket> -
Finds the last element in this stream matching
test.inherited -
listen(
void onData(Socket event)?, {Function? onError, void onDone()?, bool? cancelOnError}) → StreamSubscription< Socket> -
Adds a subscription to this stream.
override
-
map<
S> (S convert(Socket event)) → Stream< S> -
Transforms each element of this stream into a new stream event.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
peerGone(
HttpConnectionInfo info) → Future< void> ? -
Completes when the connection
infodescribes has ended; null for one this socket did not accept. -
pipe(
StreamConsumer< Socket> streamConsumer) → Future -
Pipes the events of this stream into
streamConsumer.inherited -
reduce(
Socket combine(Socket previous, Socket element)) → Future< Socket> -
Combines a sequence of values by repeatedly applying
combine.inherited -
responseWritten(
HttpConnectionInfo info) → void - The response to the connection's current request has been written: the next bytes start a new header block.
-
singleWhere(
bool test(Socket element), {Socket orElse()?}) → Future< Socket> -
Finds the single element in this stream matching
test.inherited -
skip(
int count) → Stream< Socket> -
Skips the first
countdata events from this stream.inherited -
skipWhile(
bool test(Socket element)) → Stream< Socket> -
Skip data events from this stream while they are matched by
test.inherited -
take(
int count) → Stream< Socket> -
Provides at most the first
countdata events of this stream.inherited -
takeWhile(
bool test(Socket element)) → Stream< Socket> -
Forwards data events while
testis successful.inherited -
timeout(
Duration timeLimit, {void onTimeout(EventSink< Socket> sink)?}) → Stream<Socket> -
Creates a new stream with the same events as this stream.
inherited
-
toList(
) → Future< List< Socket> > -
Collects all elements of this stream in a List.
inherited
-
toSet(
) → Future< Set< Socket> > -
Collects the data of this stream in a Set.
inherited
-
toString(
) → String -
A string representation of this object.
inherited
-
transform<
S> (StreamTransformer< Socket, S> streamTransformer) → Stream<S> -
Applies
streamTransformerto this stream.inherited -
where(
bool test(Socket element)) → Stream< Socket> -
Creates a new stream from this stream that discards some elements.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited
Static Methods
-
defaultMaxHeaderBytes(
RpcSecurityPolicy policy) → int -
Four times what
policyadmits as one request's head: the method path, the metadata text, the:and CRLF around each header, and the request line. A block a little over the policy still reaches the server and is refused with its reason; one far over it is cut before dart:io holds it.