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

📄 sockif.h

📁 开发TIC6000DSP经典重要资料,NDK(Network Development Kit) for TI C6000 DSP,本人费尽心血才搞到的,是开发DSP网络通讯的基础.
💻 H
字号:
//----------------------------------------------------------------------
//  Ip Stack
//----------------------------------------------------------------------
//  File: sockif.h
//
//  Sock Object public definitions
//
// Author: Michael A. Denio
// Copyright 1999 by Texas Instruments Inc.
//----------------------------------------------------------------------

#ifndef _SOCKIF_INC_
#define _SOCKIF_INC_

//
// Socket Ephemeral Port Range (Public and Reserved)
//
#define SOCK_USERPORT_FIRST 0xE000      // Local User Ports
#define SOCK_USERPORT_LAST  0xEFFF
#define SOCK_RESPORT_FIRST  0xF000      // Reserved NAT Ports
#define SOCK_RESPORT_LAST   0xFFFE

//
// Protocol Control Commands
//
#define PRC_IFDOWN              0       // interface transition
#define PRC_ROUTEDEAD           1       // select new route if possible ???
#define PRC_QUENCH2             3       // DEC congestion bit says slow down
#define PRC_QUENCH              4       // some one said to slow down
#define PRC_MSGSIZE             5       // message size forced drop
#define PRC_HOSTDEAD            6       // host appears to be down
#define PRC_HOSTUNREACH         7       // deprecated (use PRC_UNREACH_HOST)
#define PRC_UNREACH_NET         8       // no route to network
#define PRC_UNREACH_HOST        9       // no route to host
#define PRC_UNREACH_PROTOCOL    10      // dst says bad protocol
#define PRC_UNREACH_PORT        11      // bad port #
#define PRC_UNREACH_NEEDFRAG    12      // (use PRC_MSGSIZE)
#define PRC_UNREACH_SRCFAIL     13      // source route failed
#define PRC_REDIRECT_NET        14      // net routing redirect
#define PRC_REDIRECT_HOST       15      // host routing redirect
#define PRC_REDIRECT_TOSNET     16      // redirect for type of service & net
#define PRC_REDIRECT_TOSHOST    17      // redirect for tos & host
#define PRC_TIMXCEED_INTRANS    18      // packet lifetime expired in transit
#define PRC_TIMXCEED_REASS      19      // lifetime expired on reass q
#define PRC_PARAMPROB           20      // header incorrect
#define PRC_NCMDS               21

//
// IP Socket Options (IpFlags)
//
#define SOCK_IP_HDRINCL         0x0001  // Include IP Header (raw only)
#define SOCK_IP_OPTIONS         0x0002  // Use supplied IP Options

// Sock Object Structure
typedef struct _sock {
             uint       Type;           // Set to HTYPE_SOCK
             HANDLE     hFd;            // Handle to file descriptor
             uint       Family;         // Address Family as AF_ in socket.h
             uint       SockType;       // Type as SOCK_ in socket.h
             uint       Protocol;       // IP Protocol: TCP, UDP, ICMP, etc.

             uint       IpFlags;        // IP Protocol Options (raw only)
             uint       IpTtl;          // IP TTL
             uint       IpTos;          // IP TOS
             uint       IpOptSize;      // IP Header Options Size
             UINT8      IpOptions[40];  // IP Header Options

             uint       SockProt;       // Socket Protocol Handler
#define SOCKPROT_NONE   0
#define SOCKPROT_TCP    1
#define SOCKPROT_UDP    2
#define SOCKPROT_RAW    3

             uint       OptionFlags;    // SO_ options as defined in socket.h
             uint       StateFlags;     // SS_ flags as defined below
             UINT32     dwLingerTime;   // Time used when SO_LINGER set

             // Protocol Control
             struct _sock *pProtNext;   // Pointer to next in protocol list
             struct _sock *pProtPrev;   // Pointer to prev in protocol list
             IPN        FIP;            // Foreign IP address
             uint       FPort;          // Foreign Port
             IPN        LIP;            // Local IP address (NULL for wildcard)
             uint       LPort;          // Local Port (NULL if not bound)
             IPN        BIP;            // Bound IP address (SS_ADDR only)
             uint       BPort;          // Bound Port (SS_ADDR only)
             HANDLE     hTP;            // Handle to protocol specific data
             HANDLE     hRoute;         // Handle to cached route
             HANDLE     hIFTx;          // Handle to Default IF for transmit

             // Connection State Stuff
             struct _sock *pParent;     // Pointer back to accept socket
             struct _sock *pPrevQ;      // Prev socket in pend/ready queue
             struct _sock *pPending;    // Pending connection sockets
             struct _sock *pReady;      // Ready connected sockets
             uint       ConnMax;        // Max pending/ready connections
             uint       ConnTotal;      // Total connections

             // Read/Write Stuff
             int        ErrorPending;   // Error returned on next socket call
             INT32      OOBMark;        // Out of band info mark
             uint       OOBData;        // Out of band info data
             UINT32     dwRxTimeout;    // Timeout for Rx IO on stream
             UINT32     dwTxTimeout;    // Timeout for Tx IO on stream
             HANDLE     hSBRx;          // Rx Buffer
             HANDLE     hSBTx;          // Tx Buffer
        } SOCK;

//
// Socket Protocol Block
//
typedef struct _sockpcb {
             IPN        IPAddrLocal;    // Local IP Address
             uint       PortLocal;      // Local IP Port
             IPN        IPAddrForeign;  // Foreign IP Address
             uint       PortForeign;    // Foreign IP Port
             uint       State;          // Socket State (protocol dependent)
        } SOCKPCB;

//
// Socket Access Functions
//

//------------------------------------------------------------------------
// General Access Functions (called from upper layers)
//
_extern int    SockNew( int Domain, int Type, int Protocol, HANDLE hFd,
                       HANDLE *phSock );
_extern int    SockClose( HANDLE hSock );

_extern int    SockCheck( HANDLE hSock, int IoType );
#define  SOCK_READ       0
#define  SOCK_WRITE      1
#define  SOCK_EXCEPT     2

_extern int    SockSet(HANDLE hSock, int Type, int Prop, void *pbuf, int size);
_extern int    SockGet(HANDLE hSock, int Type, int Prop, void *pbuf, int *psize);

_extern int    SockShutdown( HANDLE hSock, int how );

_extern int    SockConnect( HANDLE hSock, PSA pName );
_extern int    SockDisconnect( HANDLE hSock );
_extern int    SockBind( HANDLE hSock, PSA pName );

_extern int    SockGetName( HANDLE hSock, PSA pSockName, PSA pPeerName );

_extern int    SockListen( HANDLE hSock, int maxcon );
_extern int    SockAccept( HANDLE hSock, HANDLE hFd, HANDLE *phSock );

_extern int    SockRecv( HANDLE hSock, INT8 *pBuf, INT32 size,
                        int flags, PSA pPeer, INT32 *pRetSize );
_extern int    SockSend( HANDLE hSock, INT8 *pBuf, INT32 size,
                        int flags, INT32 *pRetSize );
_extern int    SockRecvNC( HANDLE hSock, int flags, PSA pPeer, PBM_Pkt **ppPkt );

_extern int    SockGetPcb( uint SockProt, uint BufSize, UINT8 *pBuf );


//------------------------------------------------------------------------
// PCB Related Socket Access Functions (called from stack protocols)
//
_extern int      SockPcbAttach( HANDLE hSock );
_extern int      SockPcbDetach( HANDLE hSock );
_extern void     SockPcbCleanup();
_extern int      SockPcbBind( HANDLE hSock, IPN IP, uint Port );
_extern int      SockPcbConnect( HANDLE hSock, IPN IP, uint Port );
_extern HANDLE   SockPcbResolve( uint SockProt, IPN LIP, uint LPort,
                                IPN FIP, uint FPort, uint Match );
#define SOCK_RESOLVE_BEST       1       // Return Best Match
#define SOCK_RESOLVE_EXACT      2       // Return Exact Match
#define SOCK_RESOLVE_SPAWN      3       // Return exact, or spawn on best match
_extern HANDLE   SockPcbResolveChain( HANDLE hSock, uint wSockProt, uint Prot,
                                IPN LIP, uint LPort, IPN FIP, uint FPort );
_extern void   SockPcbCtlError( uint Code, IPHDR *pIpHdr );
_extern void   SockPcbRtChange( HANDLE hRt );

//------------------------------------------------------------------------
// Low-level Access Functions (called from stack protocols)
//
_extern int    SockNotify( HANDLE hSock, int Notification );
#define SOCK_NOTIFY_CONNECT     1
#define SOCK_NOTIFY_RCVACK      2
#define SOCK_NOTIFY_RCVDATA     3
#define SOCK_NOTIFY_RCVFIN      4
#define SOCK_NOTIFY_DISCONNECT  5
#define SOCK_NOTIFY_CLOSED      6
#define SOCK_NOTIFY_ERROR       7

_extern void   SockSetOOBMark( HANDLE hSock, INT32 OOBMark );
_extern void   SockSetOOBData( HANDLE hSock, UINT8 OOBData );
_extern void   SockSpawnAbort( HANDLE hSock );
_extern HANDLE SockValidateRoute( HANDLE hSock );
_extern PBM_Pkt *SockCreatePacket( HANDLE hSock, uint Size );

//
// Low Level Object Interface
//

#ifdef _STRONG_CHECKING
_extern uint   SockGetProtocol( HANDLE h );
_extern uint   SockGetIpHdrSize( HANDLE h );
_extern HANDLE SockGetTx( HANDLE h );
_extern HANDLE SockGetRx( HANDLE h );
_extern HANDLE SockGetTP( HANDLE h );
_extern IPN    SockGetLIP( HANDLE h );
_extern IPN    SockGetFIP( HANDLE h );
_extern uint   SockGetLPort( HANDLE h );
_extern uint   SockGetFPort( HANDLE h );
_extern HANDLE SockGetRoute( HANDLE h );
_extern HANDLE SockGetIFTx( HANDLE h );
_extern uint   SockGetOptionFlags( HANDLE h );
_extern void   SockSetError( HANDLE h, int Error );
#else
#define SockGetProtocol( h )     (((SOCK *)h)->Protocol)
#define SockGetIpHdrSize( h )    ((((SOCK *)h)->IpFlags & IP_HDRINCL) ? 0 : (IPHDR_SIZE + (((SOCK *)h)->IpOptSize)))
#define SockGetTx( h )           (((SOCK *)h)->hSBTx)
#define SockGetRx( h )           (((SOCK *)h)->hSBRx)
#define SockGetTP( h )           (((SOCK *)h)->hTP)
#define SockGetLIP( h )          (((SOCK *)h)->LIP)
#define SockGetFIP( h )          (((SOCK *)h)->FIP)
#define SockGetLPort( h )        (((SOCK *)h)->LPort)
#define SockGetFPort( h )        (((SOCK *)h)->FPort)
#define SockGetRoute( h )        (((SOCK *)h)->hRoute)
#define SockGetIFTx( h )         (((SOCK *)h)->hIFTx)
#define SockGetOptionFlags( h )  (((SOCK *)h)->OptionFlags)
#define SockSetError( h, e )     (((SOCK *)h)->ErrorPending=e)
#endif

#endif

⌨️ 快捷键说明

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