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

📄 net_sock.c

📁 AT91SAM7X256
💻 C
📖 第 1 页 / 共 5 页
字号:
*                   (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_TYPE           Invalid socket type.
*                               NET_SOCK_ERR_INVALID_OP             Invalid socket operation.
*                               NET_SOCK_ERR_INVALID_STATE          Invalid socket state.
*                               NET_SOCK_ERR_INVALID_FAMILY         Invalid socket protocol family.
*                               NET_SOCK_ERR_INVALID_PROTOCOL       Invalid socket protocol.
*                               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().
*
* 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_SET(psock->Flags, NET_SOCK_FLAG_USED);
    if (used != DEF_YES) {
        NET_CTR_ERR_INC(NetSock_ErrNotUsedCtr);
        NetOS_Unlock();
       *perr =  NET_SOCK_ERR_NOT_USED;
        return (NET_SOCK_BSD_ERR_BIND);
    }
#endif

                                                                /* -------------------- BIND SOCK --------------------- */
    rtn_code = NetSock_BindHandler((NET_SOCK_ID      )sock_id,
                                   (NET_SOCK_ADDR   *)paddr_local,
                                   (NET_SOCK_ADDR_LEN)addr_len,
                                   (CPU_BOOLEAN      )DEF_NO,
                                   (NET_ERR         *)perr);


                                                                /* ----------------- RELEASE NET LOCK ----------------- */
    NetOS_Unlock();


    return (rtn_code);
}


/*$PAGE*/
/*
*********************************************************************************************************
*                                           NetSock_Conn()
*
* Description : (1) Connect a socket to a remote host :
*
*                   (a) Validate socket  handle identifier
*                   (b) Acquire  network lock
*                   (c) Validate socket
*                   (d) Validate remote  host address
*                   (e) Handle   connection by socket type
*                   (f) Release  network lock
*
*
* Argument(s) : sock_id         Socket descriptor/handle identifier of socket to connect.
*
*               paddr_remote    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_SOCK_ERR_NONE                   Socket successfully connected to remote address.
*                               NET_ERR_INIT_INCOMPLETE             Network initialization NOT complete.
*                               NET_SOCK_ERR_NOT_USED               Socket NOT currently used.
*                               NET_SOCK_ERR_INVALID_SOCK           Invalid socket number.
*                               NET_SOCK_ERR_INVALID_ADDR           Invalid remote address.
*                               NET_SOCK_ERR_INVALID_TYPE           Invalid socket type.
*
*                                                                   - RETURNED BY NetSock_ConnHandlerDatagram() : --
*                                                                   -- RETURNED BY NetSock_ConnHandlerStream() : ---
*                               NET_SOCK_ERR_CLOSED                 Socket already closed.
*                               NET_SOCK_ERR_INVALID_SOCK           Invalid socket number.
*                               NET_SOCK_ERR_INVALID_TYPE           Invalid socket type.
*                               NET_SOCK_ERR_INVALID_OP             Invalid socket operation.
*                               NET_SOCK_ERR_INVALID_STATE          Invalid socket state.
*                               NET_SOCK_ERR_INVALID_FAMILY         Invalid socket protocol family.
*                               NET_SOCK_ERR_INVALID_PROTOCOL       Invalid socket protocol.
*                               NET_SOCK_ERR_INVALID_ADDR           Invalid socket address.
*                               NET_SOCK_ERR_INVALID_ADDR_LEN       Invalid socket address structure length.
*                               NET_SOCK_ERR_ADDR_IN_USE            Socket address already in use.
*                               NET_SOCK_ERR_PORT_NBR_NONE_AVAIL    Port number NOT available.
*                               NET_SOCK_ERR_CONN_IN_USE            Socket connection already in use.
*                               NET_SOCK_ERR_CONN_FAIL              Socket connection operation(s) failed.
*                               NET_SOCK_ERR_FAULT                  Socket fault; connection(s) aborted.
*
*                               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_

⌨️ 快捷键说明

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