// 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.

`./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
