diff --git a/grpc.t b/grpc.t
index 7beb75b..64f0f30 100644
--- a/grpc.t
+++ b/grpc.t
@@ -747,7 +747,7 @@
 		$trailers .= $rst if $uri eq '/Discard_NE';
 		$trailers .= ($rst x 3) if $uri eq '/Discard_NE3';
 		$trailers .= $cnl if $uri eq '/Discard_CNL';
-		Test::Nginx::HTTP2::raw_write($client, $trailers);
+		$c->raw_write($trailers);
 
 		return $s->read(all => [{ fin => 1 }], wait => 2)
 			if $uri eq '/Discard_WU' || $uri eq '/Discard_NE';
diff --git a/lib/Test/Nginx/HTTP2.pm b/lib/Test/Nginx/HTTP2.pm
index 2a7f0a6..e1a4b1a 100644
--- a/lib/Test/Nginx/HTTP2.pm
+++ b/lib/Test/Nginx/HTTP2.pm
@@ -39,14 +39,6 @@
 	my $preface = defined $extra{preface} ? $extra{preface}
 		: 'PRI * HTTP/2.0' . CRLF . CRLF . 'SM' . CRLF . CRLF;
 
-	if ($extra{proxy}) {
-		raw_write($s, $extra{proxy});
-	}
-
-	# preface
-
-	raw_write($s, $preface);
-
 	my $self = bless {
 		socket => $s, last_stream => -1,
 		dynamic_encode => [ static_table() ],
@@ -55,6 +47,14 @@
 		iws => 65535, conn_window => 65535, streams => {}
 	}, $class;
 
+	if ($extra{proxy}) {
+		$self->raw_write($extra{proxy});
+	}
+
+	# preface
+
+	$self->raw_write($preface);
+
 	return $self if $extra{pure};
 
 	# update windows, if any
@@ -76,13 +76,13 @@
 sub h2_ping {
 	my ($self, $payload) = @_;
 
-	raw_write($self->{socket}, pack("x2C2x5a8", 8, 0x6, $payload));
+	$self->raw_write(pack("x2C2x5a8", 8, 0x6, $payload));
 }
 
 sub h2_rst {
 	my ($self, $stream, $error) = @_;
 
-	raw_write($self->{socket}, pack("x2C2xNN", 4, 0x3, $stream, $error));
+	$self->raw_write(pack("x2C2xNN", 4, 0x3, $stream, $error));
 }
 
 sub h2_goaway {
@@ -92,11 +92,11 @@
 	my $buf = pack("x2C2xN3A*", $len, 0x7, $stream, $lstream, $err, $debug);
 
 	my @bufs = map {
-		raw_write($self->{socket}, substr $buf, 0, $_, "");
+		$self->raw_write(substr $buf, 0, $_, "");
 		select undef, undef, undef, 0.2;
 	} @{$extra{split}};
 
-	raw_write($self->{socket}, $buf);
+	$self->raw_write($buf);
 }
 
 sub h2_priority {
@@ -105,14 +105,14 @@
 	$stream = 0 unless defined $stream;
 	$dep = 0 unless defined $dep;
 	$dep |= $extra{excl} << 31 if exists $extra{excl};
-	raw_write($self->{socket}, pack("x2C2xNNC", 5, 0x2, $stream, $dep, $w));
+	$self->raw_write(pack("x2C2xNNC", 5, 0x2, $stream, $dep, $w));
 }
 
 sub h2_window {
 	my ($self, $win, $stream) = @_;
 
 	$stream = 0 unless defined $stream;
-	raw_write($self->{socket}, pack("x2C2xNN", 4, 0x8, $stream, $win));
+	$self->raw_write(pack("x2C2xNN", 4, 0x8, $stream, $win));
 }
 
 sub h2_settings {
@@ -121,14 +121,14 @@
 	my $len = 6 * @pairs / 2;
 	my $buf = pack_length($len) . pack "CCx4", 0x4, $ack ? 0x1 : 0x0;
 	$buf .= pack "nN", splice @pairs, 0, 2 while @pairs;
-	raw_write($self->{socket}, $buf);
+	$self->raw_write($buf);
 }
 
 sub h2_unknown {
 	my ($self, $payload) = @_;
 
 	my $buf = pack_length(length($payload)) . pack("Cx5a*", 0xa, $payload);
-	raw_write($self->{socket}, $buf);
+	$self->raw_write($buf);
 }
 
 sub h2_continue {
@@ -167,12 +167,12 @@
 
 	$split = ref $extra->{split} && $extra->{split} || [];
 	for (@$split) {
-		raw_write($self->{socket}, substr($buf, 0, $_, ""));
+		$self->raw_write(substr($buf, 0, $_, ""));
 		return if $extra->{abort};
 		select undef, undef, undef, ($extra->{split_delay} || 0.2);
 	}
 
-	raw_write($self->{socket}, $buf);
+	$self->raw_write($buf);
 }
 
 sub new_stream {
@@ -268,12 +268,12 @@
 
 	$split = ref $uri->{split} && $uri->{split} || [];
 	for (@$split) {
-		raw_write($self->{socket}, substr($buf, 0, $_, ""));
+		$self->raw_write(substr($buf, 0, $_, ""));
 		goto done if $uri->{abort};
 		select undef, undef, undef, ($uri->{split_delay} || 0.2);
 	}
 
-	raw_write($self->{socket}, $buf);
+	$self->raw_write($buf);
 done:
 	return $self->{last_stream};
 }
@@ -288,7 +288,7 @@
 	local $Data::Dumper::Terse = 1;
 
 	while (1) {
-		$buf = raw_read($s, $buf, 9, $wait);
+		$buf = $self->raw_read($buf, 9, $wait);
 		last if length $buf < 9;
 
 		my $length = unpack_length($buf);
@@ -299,7 +299,7 @@
 		substr($stream, 0, 1) = 0;
 		$stream = unpack("N", pack("B32", $stream));
 
-		$buf = raw_read($s, $buf, $length + 9, $wait);
+		$buf = $self->raw_read($buf, $length + 9, $wait);
 		last if length($buf) < $length + 9;
 
 		$buf = substr($buf, 9);
@@ -321,6 +321,35 @@
 	return \@got;
 }
 
+sub raw_read {
+	my ($self, $buf, $len, $timo) = @_;
+	$timo = 8 unless $timo;
+	my $got = '';
+	my $s = $self->{socket};
+
+	while (length($buf) < $len && IO::Select->new($s)->can_read($timo)) {
+		$s->sysread($got, 16384) or last;
+		log_in($got);
+		$buf .= $got;
+	}
+	return $buf;
+}
+
+sub raw_write {
+	my ($self, $message) = @_;
+	my $s = $self->{socket};
+
+	local $SIG{PIPE} = 'IGNORE';
+
+	while (IO::Select->new($s)->can_write(0.4)) {
+		log_out($message);
+		my $n = $s->syswrite($message);
+		last unless $n;
+		$message = substr($message, $n);
+		last unless length $message;
+	}
+}
+
 ###############################################################################
 
 sub pack_body {
@@ -463,33 +492,6 @@
 	unpack 'N', pack 'xc3', unpack 'c3', $_[0];
 }
 
-sub raw_read {
-	my ($s, $buf, $len, $timo) = @_;
-	$timo = 8 unless $timo;
-	my $got = '';
-
-	while (length($buf) < $len && IO::Select->new($s)->can_read($timo)) {
-		$s->sysread($got, 16384) or last;
-		log_in($got);
-		$buf .= $got;
-	}
-	return $buf;
-}
-
-sub raw_write {
-	my ($s, $message) = @_;
-
-	local $SIG{PIPE} = 'IGNORE';
-
-	while (IO::Select->new($s)->can_write(0.4)) {
-		log_out($message);
-		my $n = $s->syswrite($message);
-		last unless $n;
-		$message = substr($message, $n);
-		last unless length $message;
-	}
-}
-
 sub new_socket {
 	my ($port, %extra) = @_;
 	my $npn = $extra{'npn'};
