⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net_sock.c

📁 ucos的tcpip协议占
💻 C
📖 第 1 页 / 共 5 页
字号:
    }
#endif

    psock = &NetSock_Tbl[sock_id];

#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
                                                                /* ---------------- VALIDATE SOCK USED ---------------- */
    used  =  DEF_BIT_IS_SET(psock->Flags, NET_SOCK_FLAG_USED);
    if (used != DEF_YES) {
        NET_CTR_ERR_INC(NetSock_ErrNotUsedCtr);
        return;
    }
                                                                /* ------------- VALIDATE SOCK CONN STATE ------------- */
    switch (psock->State) {
        case NET_SOCK_STATE_FREE:
        case NET_SOCK_STATE_DISCARD:
             NET_CTR_ERR_INC(NetSock_ErrNotUsedCtr);
             return;                                            /* Prevent 'break NOT reachable' compiler warning.      */


        case NET_SOCK_STATE_CLOSED_FAULT:
             return;                                            /* Prevent 'break NOT reachable' compiler warning.      */


        case NET_SOCK_STATE_NONE:
        case NET_SOCK_STATE_CLOSED:
        case NET_SOCK_STATE_BOUND:
        case NET_SOCK_STATE_LISTEN:
        case NET_SOCK_STATE_CONN:
        case NET_SOCK_STATE_CONN_IN_PROGRESS:
        case NET_SOCK_STATE_CONN_DONE:
        case NET_SOCK_STATE_CLOSE_IN_PROGRESS:
        case NET_SOCK_STATE_CLOSING_DATA_AVAIL:
        default:
             break;
    }
#endif


                                                                /* -------------------- CLOSE SOCK -------------------- */
    NetSock_CloseSock((NET_SOCK  *)psock,
                      (CPU_BOOLEAN)DEF_YES,                     /* See Note #1b.                                        */
                      (CPU_BOOLEAN)DEF_NO);                     /* See Note #1a.                                        */
}


/*$PAGE*/
/*
*********************************************************************************************************
*                                     NetSock_FreeConnFromSock()
*
* Description : (1) Free/de-reference network connection from socket :
*
*                   (a) Remove connection handle identifier from socket's connection accept queue
*
*
* Argument(s) : sock_id     Socket descriptor/handle identifier of socket to free network connection.
*
*               conn_id     Handle identifier of network connection.
*
* Return(s)   : none.
*
* Caller(s)   : NetSock_CloseConnFree(),
*               NetConn_CloseApp().
*
*               This function is an INTERNAL network protocol suite function & MUST NOT be called by 
*               application function(s).
*
* Note(s)     : (2) (a) When a network connection is fully connected/established, it is queued to an
*                       application connection as a cloned network connection until the connection is
*                       accepted & a new application connection is created.
*
*                       See also 'net_tcp.c  NetTCP_RxPktConnHandlerListen()  Note #5a2A1'.
*
*                   (b) Therefore, network connections need only be de-referenced from cloned socket
*                       application connections.
*********************************************************************************************************
*/
/*$PAGE*/
void  NetSock_FreeConnFromSock (NET_SOCK_ID  sock_id,
                                NET_CONN_ID  conn_id)
{
#if ((NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)                    && \
     (NET_CTR_CFG_ERR_EN         == DEF_ENABLED)                    && \
     (CPU_CFG_CRITICAL_METHOD    == CPU_CRITICAL_METHOD_STATUS_LOCAL))
    CPU_SR        cpu_sr;
#endif
#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
    CPU_BOOLEAN   used;
#endif
    NET_SOCK     *psock;

                                                                /* ------------------ VALIDATE SOCK ------------------- */
    if (sock_id == NET_SOCK_ID_NONE) {
        return;
    }

#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
    if (sock_id < NET_SOCK_ID_MIN) {
        NET_CTR_ERR_INC(NetSock_ErrInvalidSockCtr);
        return;
    }
    if (sock_id > NET_SOCK_ID_MAX) {
        NET_CTR_ERR_INC(NetSock_ErrInvalidSockCtr);
        return;
    }
#endif

    psock = &NetSock_Tbl[sock_id];

#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
                                                                /* ---------------- VALIDATE SOCK USED ---------------- */
    used  =  DEF_BIT_IS_SET(psock->Flags, NET_SOCK_FLAG_USED);
    if (used != DEF_YES) {
        NET_CTR_ERR_INC(NetSock_ErrNotUsedCtr);
        return;
    }
                                                                /* ------------- VALIDATE SOCK CONN STATE ------------- */
    switch (psock->State) {
        case NET_SOCK_STATE_FREE:
        case NET_SOCK_STATE_DISCARD:
             NET_CTR_ERR_INC(NetSock_ErrNotUsedCtr);
             return;                                            /* Prevent 'break NOT reachable' compiler warning.      */


        case NET_SOCK_STATE_CLOSED_FAULT:
             return;                                            /* Prevent 'break NOT reachable' compiler warning.      */


        case NET_SOCK_STATE_NONE:
        case NET_SOCK_STATE_CLOSED:
        case NET_SOCK_STATE_CLOSE_IN_PROGRESS:
        case NET_SOCK_STATE_CLOSING_DATA_AVAIL:
        case NET_SOCK_STATE_LISTEN:
        case NET_SOCK_STATE_BOUND:
        case NET_SOCK_STATE_CONN:
        case NET_SOCK_STATE_CONN_IN_PROGRESS:
        case NET_SOCK_STATE_CONN_DONE:
        default:
             break;
    }
#endif


                                                                /* --------------- FREE/DE-REF CONN ID ---------------- */
#if (NET_SOCK_CFG_TYPE_STREAM_EN == DEF_ENABLED)
    NetSock_ConnAcceptQ_ConnID_Remove(psock, conn_id);
#endif


   (void)&psock;                                                /* Prevent possible compiler warnings.                  */
   (void)&conn_id;
}


/*$PAGE*/
/*
*********************************************************************************************************
*                                           NetSock_Bind()
*
* Description : (1) Bind a socket to a local address :
*
*                   (a) Validate socket  handle identifier
*                   (b) Acquire  network lock
*                   (c) Validate socket
*                   (d) Bind     socket  to a local address
*                   (e) Release  network lock
*
*
* Argument(s) : sock_id         Socket descriptor/handle identifier of socket to bind to a local address.
*
*               paddr_local     Pointer to socket address structure (see Note #3).
*
*               addr_len        Length  of socket address structure (in octets).
*
*               perr        Pointer to variable that will receive the return error code from this function :
*
*                               NET_ERR_INIT_INCOMPLETE             Network initialization NOT complete.
*                               NET_SOCK_ERR_INVALID_SOCK           Invalid socket number.
*                               NET_SOCK_ERR_NOT_USED               Socket NOT currently used.
*
*                                                                   --- RETURNED BY NetSock_BindHandler() : ---
*                               NET_SOCK_ERR_NONE                   Socket successfully bound to local address.
*                               NET_SOCK_ERR_CLOSED                 Socket already closed.
*                               NET_SOCK_ERR_INVALID_FAMILY         Invalid socket protocol family.
*                               NET_SOCK_ERR_INVALID_PROTOCOL       Invalid socket protocol.
*                               NET_SOCK_ERR_INVALID_TYPE           Invalid socket type.
*                               NET_SOCK_ERR_INVALID_STATE          Invalid socket state.
*                               NET_SOCK_ERR_INVALID_OP             Invalid socket operation.
*                               NET_SOCK_ERR_INVALID_ADDR           Invalid local address.
*                               NET_SOCK_ERR_ADDR_IN_USE            Local address already in use.
*                               NET_SOCK_ERR_PORT_NBR_NONE_AVAIL    Port number NOT available.
*                               NET_SOCK_ERR_CONN_FAIL              Socket connection operation(s) failed.
*
*                               NET_CONN_ERR_NULL_PTR               Argument(s) passed a NULL pointer.
*                               NET_CONN_ERR_NONE_AVAIL             NO available connections to allocate.
*                               NET_CONN_ERR_NOT_USED               Connection(s) NOT currently used.
*                               NET_CONN_ERR_INVALID_CONN           Invalid connection number.
*                               NET_CONN_ERR_INVALID_FAMILY         Invalid connection family.
*                               NET_CONN_ERR_INVALID_TYPE           Invalid connection type.
*                               NET_CONN_ERR_INVALID_LIST_IX        Invalid connection list index.
*                               NET_CONN_ERR_INVALID_ADDR_LEN       Invalid connection address length.
*                               NET_CONN_ERR_ADDR_IN_USE            Connection address already in use.
*                               NET_CONN_ERR_ADDR_NOT_USED          Connection address NOT in use.
*
*                                                                   ------- RETURNED BY NetOS_Lock() : --------
*                               NET_OS_ERR_LOCK                     Network access NOT acquired.
*
* Return(s)   : NET_SOCK_BSD_ERR_NONE, if NO errors.
*
*               NET_SOCK_BSD_ERR_BIND, otherwise.
*
* Caller(s)   : bind().
*
*               This function is a network protocol suite application interface (API) function & MAY be 
*               called by application function(s).
*
* Note(s)     : (2) NetSock_Bind() blocked until network initialization completes; perform NO action.
*
*               (3) (a) Socket address structure 'Family' member MUST be configured in host-order & MUST
*                       NOT be converted to/from network-order.
*
*                   (b) Socket address structure addresses MUST be configured/converted from host-order
*                       to network-order.
*
*                   See also 'net_sock.h  NETWORK SOCKET ADDRESS DATA TYPES  Note #2'.
*********************************************************************************************************
*/
/*$PAGE*/
NET_SOCK_RTN_CODE  NetSock_Bind (NET_SOCK_ID         sock_id,
                                 NET_SOCK_ADDR      *paddr_local,
                                 NET_SOCK_ADDR_LEN   addr_len,
                                 NET_ERR            *perr)
{
#if ((NET_ERR_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)                    && \
     (NET_CTR_CFG_ERR_EN         == DEF_ENABLED)                    && \
     (CPU_CFG_CRITICAL_METHOD    == CPU_CRITICAL_METHOD_STATUS_LOCAL))
    CPU_SR              cpu_sr;
#endif
#if (NET_ERR_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)
    CPU_BOOLEAN         used;
    NET_SOCK           *psock;
#endif
    NET_SOCK_RTN_CODE   rtn_code;


#if (NET_ERR_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)
                                                                /* ----------------- VALIDATE SOCK ID ----------------- */
    if (sock_id < NET_SOCK_ID_MIN) {
        NET_CTR_ERR_INC(NetSock_ErrInvalidSockCtr);
       *perr =  NET_SOCK_ERR_INVALID_SOCK;
        return (NET_SOCK_BSD_ERR_BIND);
    }
    if (sock_id > NET_SOCK_ID_MAX) {
        NET_CTR_ERR_INC(NetSock_ErrInvalidSockCtr);
       *perr =  NET_SOCK_ERR_INVALID_SOCK;
        return (NET_SOCK_BSD_ERR_BIND);
    }
#endif


                                                                /* ----------------- ACQUIRE NET LOCK ----------------- */
    NetOS_Lock(perr);
    if (*perr != NET_OS_ERR_NONE) {
         return (NET_SOCK_BSD_ERR_BIND);
    }

#if (NET_ERR_CFG_ARG_CHK_EXT_EN == DEF_ENABLED)
    if (Net_InitDone != DEF_YES) {                              /* If init NOT complete, exit (see Note #2).            */
        NetOS_Unlock();
       *perr =  NET_ERR_INIT_INCOMPLETE;
        return (NET_SOCK_BSD_ERR_BIND);
    }


                                                                /* ---------------- VALIDATE SOCK USED ---------------- */
    psock = &NetSock_Tbl[sock_id];
    used  =  DEF_BIT_IS_SE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -