// SPDX-License-Identifier: GPL-2.0
// send with MSG_ZEROCOPY on a non-established socket
//
// verify that a send in state TCP_CLOSE correctly aborts the zerocopy
// operation, specifically it does not increment the zerocopy counter.
//
// First send on a closed socket and wait for (absent) notification.
// Then connect and send and verify that notification nr. is zero.

--send_omit_free	// do not reuse send buffers with zerocopy

`./defaults.sh`

    0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
   +0 setsockopt(4, SOL_SOCKET, SO_ZEROCOPY, [1], 4) = 0

   +0 send(4, ..., 4000, MSG_ZEROCOPY) = -1 EPIPE (Broken pipe)

   +0.1 recvmsg(4, {msg_name(...)=...,
                    msg_iov(1)=[{...,0}],
                    msg_flags=MSG_ERRQUEUE,
                    msg_control=[]}, MSG_ERRQUEUE) = -1 EAGAIN (Resource temporarily unavailable)

   +0...0 connect(4, ..., ...) = 0

   +0 > S 0:0(0) <mss 1460,sackOK,TS val 0 ecr 0,nop,wscale 8>
   +0 < S. 0:0(0) ack 1 win 32792 <mss 1000,sackOK,nop,nop,nop,wscale 7>
   +0 > . 1:1(0) ack 1

   +0 send(4, ..., 4000, MSG_ZEROCOPY) = 4000
   +0 > P. 1:4001(4000) ack 1
   +0 < . 1:1(0) ack 4001 win 257

   +0 recvmsg(4, {msg_name(...)=...,
                  msg_iov(1)=[{...,0}],
                  msg_flags=MSG_ERRQUEUE,
                  msg_control=[
                        {cmsg_level=CMSG_LEVEL_IP,
                         cmsg_type=CMSG_TYPE_RECVERR,
                         cmsg_data={ee_errno=0,
                                    ee_origin=SO_EE_ORIGIN_ZEROCOPY,
                                    ee_type=0,
                                    ee_code=SO_EE_CODE_ZEROCOPY_COPIED,
                                    ee_info=0,
                                    ee_data=0}}
                   ]}, MSG_ERRQUEUE) = 0
