github.com/GeniusesGroup/libgo@v0.0.0-20220929090155-5ff932cb408e/tcp/stream-status.go (about)

     1  /* For license and copyright information please see the LEGAL file in the code repository */
     2  
     3  package tcp
     4  
     5  import "sync/atomic"
     6  
     7  const (
     8  	SocketState_Unset SocketState = iota
     9  	// represents waiting for a connection request from any remote TCP and port
    10  	SocketState_LISTEN
    11  	// represents waiting for a matching connection request after having sent a connection request.
    12  	SocketState_SYN_SENT
    13  	// represents waiting for a confirming connection request acknowledgment
    14  	// after having both received and sent a connection request.
    15  	SocketState_SYN_RECEIVED
    16  	/* represents an open connection, data received can be
    17  	delivered to the user.  The normal state for the data transfer phase
    18  	of the connection. */
    19  	SocketState_ESTABLISHED
    20  	// represents waiting for a connection termination request from the remote TCP,
    21  	// or an acknowledgment of the connection termination request previously sent.
    22  	SocketState_FIN_WAIT_1
    23  	// represents waiting for a connection termination request from the remote TCP.
    24  	SocketState_FIN_WAIT_2
    25  	// represents no connection state at all.
    26  	SocketState_CLOSE
    27  	// represents waiting for a connection termination request from the local user.
    28  	SocketState_CLOSE_WAIT
    29  	// represents waiting for a connection termination request acknowledgment from the remote TCP.
    30  	SocketState_CLOSING
    31  	// represents waiting for an acknowledgment of the connection termination request previously sent to the remote TCP
    32  	// which includes an acknowledgment of its connection termination request
    33  	SocketState_LAST_ACK
    34  	// represents waiting for enough time to pass to be sure the remote TCP received the acknowledgment
    35  	// of its connection termination request.
    36  	SocketState_TIME_WAIT
    37  
    38  	// SocketState_NEW_SYN_RECV
    39  )
    40  
    41  // SocketState use to indicate socket state.
    42  type SocketState uint32
    43  
    44  func (s *SocketState) Load() SocketState {
    45  	return SocketState(atomic.LoadUint32((*uint32)(s)))
    46  }
    47  func (s *SocketState) Store(SocketState SocketState) {
    48  	atomic.StoreUint32((*uint32)(s), uint32(SocketState))
    49  }
    50  func (s *SocketState) CompareAndSwap(old, new SocketState) (swapped bool) {
    51  	return atomic.CompareAndSwapUint32((*uint32)(s), uint32(old), uint32(new))
    52  }