From nobody Wed Sep 17 18:02:54 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3DDFD25BF08 for ; Thu, 26 Jun 2025 08:42:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750927325; cv=none; b=HdBM7wSjyy4dAonJ3wxgx+Ek2dHCeZYrL2IQBXpAYlYt7dTa0dBTy4vKEHMZ2dtxmBTcQHSV4coNqzjlAKFKPwHkoneeLG/kUHsC/eJt9E5CwZNlW0yxW4HiWd1OAGdm41Q2ABCleRGPqpFELwRn+vz3n/fylOPlFiRr7YeofSg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750927325; c=relaxed/simple; bh=epwapybJb3CgkKtp/aeYa0kMv1PgIz/cC1O6ujlwZOY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=f2XcpRaTMJSWpE4N35+JpoxZvsho4Cv8HhkSSPxN8QtHiwXwx5cwTfl8bT1bJdQxEmgtj8lKCldB9vpEHcXoSwHjVnEyYMv1pMzhckT0GUZo51OIk0ReE0X/d6ztx+d8pUv/JS7uINhpaX+O4/au3ZTi69GVthyOm3d9PF4+/pE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JhxT6E6X; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JhxT6E6X" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 368F9C4CEEE; Thu, 26 Jun 2025 08:42:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750927324; bh=epwapybJb3CgkKtp/aeYa0kMv1PgIz/cC1O6ujlwZOY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JhxT6E6Xqbrj/JzxGyu7KSud5bpSyI6i+BkaifWY+kIoltNYPXm0yCqU33uvk8WfG cUh0GDkIZPN7gFHFQVEpOMBgBth/jEEAVHLf4M03RF2s1CJPewJhJ6SrSHXavWbghw jPjwKz7Vm8nA68RGMguBlV0ZC38w3+HshsPysJ4mnlCwgvKRfv5pXcTgfWuhpsZs91 Aqrme9MQ9/Fitbys+vuLHxIocKhOch2o8hbEWN25djyRPGZHrDdXtq0FJy+5Hy3kjD HMSyg+83pE0OjT14/My5017S9gUKBKbAacCpLYpWdi76oNrnEmKF+GSgLTBWKSBZ2c NP2fPE7jgeudA== From: Geliang Tang To: mptcp@lists.linux.dev, hare@kernel.org Cc: Geliang Tang Subject: [PATCH mptcp-next v3 1/4] mptcp: use sk_eat_skb in recvmsg_mskq Date: Thu, 26 Jun 2025 16:41:50 +0800 Message-ID: <3433ba514e79e7e888dfdd786db13fb150ecfd22.1750926916.git.geliang@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch uses sk_eat_skb() helper in __mptcp_recvmsg_mskq() instead of open-coding it. Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 1de42dc4e8ea..2f747ab730e5 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1890,8 +1890,7 @@ static int __mptcp_recvmsg_mskq(struct sock *sk, skb->destructor =3D NULL; atomic_sub(skb->truesize, &sk->sk_rmem_alloc); sk_mem_uncharge(sk, skb->truesize); - __skb_unlink(skb, &sk->sk_receive_queue); - __kfree_skb(skb); + sk_eat_skb(sk, skb); msk->bytes_consumed +=3D count; } =20 --=20 2.48.1 From nobody Wed Sep 17 18:02:54 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5053625BF08 for ; Thu, 26 Jun 2025 08:42:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750927327; cv=none; b=XE4Bql4S64AsJ0OVPKphYNS/ec0yUmgxf46/PWvxX8cMy+bpSoYHEijm1OEmP3c/aggEjYqj0HNse3uBdRsKxsI7bAczCQvEvJr5lcVAhGZp51v9kiR7/bq7WGd/1NIcsC8IoHq4jv2U2pe8WksJ+Up4sOH47IUzzsIUVDc5QZI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750927327; c=relaxed/simple; bh=CmcjnRV2h9bswc/VZ0U852+Jdm+rShc+0jP8f4GZ6+4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ov2y0L+18lc1i2FX3RYZnC3ZJaY1tiIRnfoK1ifxK+RphSu21bYcuw1xJeXgVV/6Wnaje/R1S1Ut5eNc3+b4WjkJSDgGQmwtWwyFaUbbkzvTSObIY7Lb7IysCKRw8YO8YCdwAkDDEE0luN1ZztT7eGwx0qgj5Nr8AWnB6MTWMCE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jw6ViJhU; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jw6ViJhU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 882C4C4CEF3; Thu, 26 Jun 2025 08:42:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750927327; bh=CmcjnRV2h9bswc/VZ0U852+Jdm+rShc+0jP8f4GZ6+4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jw6ViJhUZ47gBol+I6AqFjQ6aMbVGhbvgSLOTYG0hDSglRr4KbjIWlrC606Yf/qx9 80+3W10/92a01kUS3ASJ3WitgDuBqEckg+FxJu5ONqMmNcLd68akGClPcereIC21IS ABjVHCaSIvR9bH+ItT+pOAJY0kWziqptJ4A9JhCS7M2pih/aAg3yyQ7EpuPOGIkG1/ 3pBFVR6udcKMH9od2VhZz30EGWXbi3kNetIwu7ZAAbFKXtRobrmVxwo/CGo0dZJ2nu nZTBHMKn+SzeziU3avpIQ8Alezlocz7kUjNnO3XvVg58flG/x7tFPsZ+4bRO4K4slY 2tGyCIkfn+V8A== From: Geliang Tang To: mptcp@lists.linux.dev, hare@kernel.org Cc: Geliang Tang Subject: [PATCH mptcp-next v3 2/4] mptcp: implement .read_sock Date: Thu, 26 Jun 2025 16:41:51 +0800 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang nvme_tcp_try_recv() needs to call .read_sock interface of struct proto_ops, but it is not implemented in MPTCP. This patch implements it with reference to __mptcp_recvmsg_mskq(). v3: - Use sk->sk_rcvbuf instead of INT_MAX as the max len. v2: - first check the sk_state (Matt), but not look for the end of the end of a connection like TCP in __tcp_read_sock(): if (TCP_SKB_CB(skb)->tcp_flags & TCPHDR_FIN) break; This will cause a use-after-free error: BUG: KASAN: slab-use-after-free in mptcp_read_sock. Reviewed-by: Hannes Reinecke Signed-off-by: Geliang Tang --- net/mptcp/protocol.c | 61 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 2f747ab730e5..488a673f4da3 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -3956,6 +3956,65 @@ static __poll_t mptcp_poll(struct file *file, struct= socket *sock, return mask; } =20 +/* + * Note: + * - It is assumed that the socket was locked by the caller. + */ +static int mptcp_read_sock(struct sock *sk, read_descriptor_t *desc, + sk_read_actor_t recv_actor) +{ + struct mptcp_sock *msk =3D mptcp_sk(sk); + struct scm_timestamping_internal tss; + size_t len =3D sk->sk_rcvbuf; + struct sk_buff *skb, *tmp; + int copied =3D 0; + + if (sk->sk_state =3D=3D TCP_LISTEN) + return -ENOTCONN; + skb_queue_walk_safe(&sk->sk_receive_queue, skb, tmp) { + u32 offset =3D MPTCP_SKB_CB(skb)->offset; + u32 data_len =3D skb->len - offset; + u32 size =3D min_t(size_t, len - copied, data_len); + int count; + + count =3D recv_actor(desc, skb, offset, size); + if (count <=3D 0) { + if (!copied) + copied =3D count; + break; + } + + if (MPTCP_SKB_CB(skb)->has_rxtstamp) + tcp_update_recv_tstamps(skb, &tss); + + copied +=3D count; + + if (count < data_len) { + MPTCP_SKB_CB(skb)->offset +=3D count; + MPTCP_SKB_CB(skb)->map_seq +=3D count; + msk->bytes_consumed +=3D count; + break; + } + + /* avoid the indirect call, we know the destructor is sock_wfree */ + skb->destructor =3D NULL; + atomic_sub(skb->truesize, &sk->sk_rmem_alloc); + sk_mem_uncharge(sk, skb->truesize); + sk_eat_skb(sk, skb); + msk->bytes_consumed +=3D count; + + if (copied >=3D len) + break; + } + + mptcp_rcv_space_adjust(msk, copied); + + if (copied > 0) + mptcp_cleanup_rbuf(msk, copied); + + return copied; +} + static const struct proto_ops mptcp_stream_ops =3D { .family =3D PF_INET, .owner =3D THIS_MODULE, @@ -3976,6 +4035,7 @@ static const struct proto_ops mptcp_stream_ops =3D { .recvmsg =3D inet_recvmsg, .mmap =3D sock_no_mmap, .set_rcvlowat =3D mptcp_set_rcvlowat, + .read_sock =3D mptcp_read_sock, }; =20 static struct inet_protosw mptcp_protosw =3D { @@ -4080,6 +4140,7 @@ static const struct proto_ops mptcp_v6_stream_ops =3D= { .compat_ioctl =3D inet6_compat_ioctl, #endif .set_rcvlowat =3D mptcp_set_rcvlowat, + .read_sock =3D mptcp_read_sock, }; =20 static struct proto mptcp_v6_prot; --=20 2.48.1 From nobody Wed Sep 17 18:02:54 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A012B269806 for ; Thu, 26 Jun 2025 08:42:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750927331; cv=none; b=ipDrhx6RoMGpmJO6wel63qNrKGOmU1T+lq2IqJfz1/nn25MCj0bJWCPadRkaLIcNBTSwKP9fL9P62+t/I30IsfqRgCoWe2vMDn1f33659RMGAoJLlEN5OPgYKvuJAz/mFeip/fa1Tflzax3+TX4cWMmDTPDn/tRGaTKFD5jpBYk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750927331; c=relaxed/simple; bh=qVqQvD+UaH+KTP7CqniiLub9SMXG21jxVg3IPxcftPs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VZ7iNVoFCtpDh4MHC86xneWWdVVUsV0hjvkCjQWJIZPCBJyBfTPY4vtkxPioU6bu3MMU+p4JLS6J0mrStwerCAvtVTyonOUTou2ncOE/7pFoaa3ff+WBoOvYNj2UPeBMsmrEA0cNupFgKHp95ukHW/G4GwhZq5Uu8HjxOFheedI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ryjL4RWD; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ryjL4RWD" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C6AC2C4CEEB; Thu, 26 Jun 2025 08:42:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750927331; bh=qVqQvD+UaH+KTP7CqniiLub9SMXG21jxVg3IPxcftPs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ryjL4RWDZwLCclNp8PluL7nVCP/me0Z7LyJnknpdlGtMF52gR3tKsIrG3qKyOzkcn eLMTWb93+WjwgGLJu57at2z4Dn52PqYChZE5zSfUx4AGzslsBE37iwn06eXy44dswo ZV+N97YktS1xiIiDFb5MxThxYPW159/Arniot3w1nyKxtCJziB/HrR1aSgGknqUxRQ uwK5ABPXml8mwc4frU9JcL+zxKloXjbVsaIeHVpWb73QZjyJXRyu4AElN/NIQOTKRy bdXw7pklGGDmzn9EuvokOeXbpFePCbFgJ19fB/EdzXmscwv1xSSBdTdy2/0Cb3msEQ WpuTAZoXoOPAg== From: Geliang Tang To: mptcp@lists.linux.dev, hare@kernel.org Cc: Geliang Tang Subject: [PATCH mptcp-next v3 3/4] mptcp: set .splice_read Date: Thu, 26 Jun 2025 16:41:52 +0800 Message-ID: <315a992a34bf8959af51ee20e64c57983a11310e.1750926916.git.geliang@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch sets .splice_read interface of mptcp struct proto_ops as tcp_splice_read. And invoke .read_sock in __tcp_splice_read(). Signed-off-by: Geliang Tang --- net/ipv4/tcp.c | 6 ++++++ net/mptcp/protocol.c | 2 ++ 2 files changed, 8 insertions(+) diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index c18682c3fa33..98ce7a624b33 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -779,6 +779,12 @@ static int __tcp_splice_read(struct sock *sk, struct t= cp_splice_state *tss) .arg.data =3D tss, .count =3D tss->len, }; + const struct proto_ops *ops; + + ops =3D READ_ONCE(sk->sk_socket->ops); + + if (likely(ops->read_sock)) + return ops->read_sock(sk, &rd_desc, tcp_splice_data_recv); =20 return tcp_read_sock(sk, &rd_desc, tcp_splice_data_recv); } diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 488a673f4da3..45db44700e64 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -4036,6 +4036,7 @@ static const struct proto_ops mptcp_stream_ops =3D { .mmap =3D sock_no_mmap, .set_rcvlowat =3D mptcp_set_rcvlowat, .read_sock =3D mptcp_read_sock, + .splice_read =3D tcp_splice_read, }; =20 static struct inet_protosw mptcp_protosw =3D { @@ -4141,6 +4142,7 @@ static const struct proto_ops mptcp_v6_stream_ops =3D= { #endif .set_rcvlowat =3D mptcp_set_rcvlowat, .read_sock =3D mptcp_read_sock, + .splice_read =3D tcp_splice_read, }; =20 static struct proto mptcp_v6_prot; --=20 2.48.1 From nobody Wed Sep 17 18:02:54 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E9413219E0 for ; Thu, 26 Jun 2025 08:42:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750927334; cv=none; b=l7ekR2B152OEMKZ3yD6TxiEYxU00J/D8qA4EJzvfYTW4x1tL2apoSFiKwfDaOBK/sYe+85rO/+kuJezejjONeFdt8qWKNklxQ9aRbxhsbCVyQMpbIZXisd3A5Sk4xkiFOdgZrDAp2SpaiIbUK5i3DHA7nxRa4M5iYgrGTL+WEuM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750927334; c=relaxed/simple; bh=dP9m+arofxMkgE5b4/LQq4IsABALEjKhl/dyYhFny/Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NYd/C21/PegljJ7lb/ADDP+KJVZF6NB6Y3fPacdOxKURMFF6cq1/JHTDFQqq1f/jnQDm4LK1fLdZNDYvatHdpUg+dCfnp7NUOY1wyetag3IAJeHOrDjk7lZtgOPNy3TlMeGmz0UZ7Jr53mN3OxCSiJzgf3b48mbHLMf9PpXWnFg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gmOb0Eq7; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gmOb0Eq7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D445FC4CEEB; Thu, 26 Jun 2025 08:42:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750927333; bh=dP9m+arofxMkgE5b4/LQq4IsABALEjKhl/dyYhFny/Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gmOb0Eq7FBbP3a3f6hT8Osy/3ZDVI7Zy6Sn36i1DYUWGatKC/82t6RBC85Ptj2a1f m3xfkAuv3o3FYxiDdkqBRvBgeT/S2XKpp3X7KAi1d/bE+XOfE0MoSV7IWvAZc+PpCx uoeufsZ3UIt4H4npV90mkUa1K1NUvMf+QuANhM9IJI13NLKbu+dajRH1z3iDQ0JZNz sPt5BsQI1B9nvuce73j00MX55dsOouNMfFZGU4pMWFqDrKhjytlOJ029r4BUy7Tiem jCrt3qp2BfmjGV5WXEy/nkpL1IRFvgEOYZaQaQQqpbjN0aXoDsnmKwrKQeHqrNfFt2 dpCbWS5KqGACQ== From: Geliang Tang To: mptcp@lists.linux.dev, hare@kernel.org Cc: Geliang Tang Subject: [PATCH mptcp-next v3 4/4] selftests: mptcp: add splice io mode Date: Thu, 26 Jun 2025 16:41:53 +0800 Message-ID: <2ed975ed4ca56a1a87fe38e7ad993e5c2d84513a.1750926916.git.geliang@kernel.org> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch adds a new 'splice' io mode for mptcp_connect to test the newly added read_sock() and splice() functions of MPTCP. ./mptcp_connect.sh -m splice Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_connect.c | 61 ++++++++++++++++++- .../selftests/net/mptcp/mptcp_connect.sh | 9 ++- 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_connect.c b/tools/test= ing/selftests/net/mptcp/mptcp_connect.c index ac1349c4b9e5..ce4b4ed9164d 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_connect.c +++ b/tools/testing/selftests/net/mptcp/mptcp_connect.c @@ -51,6 +51,7 @@ enum cfg_mode { CFG_MODE_POLL, CFG_MODE_MMAP, CFG_MODE_SENDFILE, + CFG_MODE_SPLICE, }; =20 enum cfg_peek { @@ -123,7 +124,7 @@ static void die_usage(void) fprintf(stderr, "\t-j -- add additional sleep at connection start and= tear down " "-- for MPJ tests\n"); fprintf(stderr, "\t-l -- listens mode, accepts incoming connection\n"= ); - fprintf(stderr, "\t-m [poll|mmap|sendfile] -- use poll(default)/mmap+writ= e/sendfile\n"); + fprintf(stderr, "\t-m [poll|mmap|sendfile|splice] -- use poll(default)/mm= ap+write/sendfile/splice\n"); fprintf(stderr, "\t-M mark -- set socket packet mark\n"); fprintf(stderr, "\t-o option -- test sockopt