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

📄 sockets.h

📁 用于嵌入式系统的TCP/IP协议栈
💻 H
字号:
/***********************************************************************//*                                                                     *//*   Module:  sockets.h                                                *//*   Release: 2001.3                                                   *//*   Version: 99.0                                                     *//*   Purpose: Supports Berkeley sockets interface to TargetTCP         *//*                                                                     *//*---------------------------------------------------------------------*//*                                                                     *//*               Copyright 1999, Blunk Microsystems                    *//*                      ALL RIGHTS RESERVED                            *//*                                                                     *//*   Licensees have the non-exclusive right to use, modify, or extract *//*   this computer program for software development at a single site.  *//*   This program may be resold or disseminated in executable format   *//*   only. The source code may not be redistributed or resold.         *//*                                                                     *//***********************************************************************/#ifndef _SOCKETS_H   /* Don't include this file more than once */#define _SOCKETS_H#ifdef __cplusplusextern "C"{#endif/***********************************************************************//* TargetTCP Configuration                                             *//***********************************************************************//*** Socket Control Block Allocation*/#define MAX_NUM_SOCKETS   32/*** Network Buffer Allocation*/#define TCP_SML_BUFS    32#define TCP_MED_BUFS    24#define TCP_BIG_BUFS    24/***********************************************************************//* Symbol and Macro Definitions                                        *//***********************************************************************//*** Host to network byte order macros*/#ifdef __LITTLE_ENDIAN__#define LITTLE_ENDIAN#else#define BIG_ENDIAN#endif#ifdef  BIG_ENDIAN#define htonl(l)    (l)#define htons(s)    (s)#else /* little endian */#define htonl(l)    (((l) << 24) | (((l) & 0xFF00) << 8) | \                     (((l) & 0xFF0000) >> 8) | (ui8)((l) >> 24))#define htons(s)    (ui16)(((s) << 8) | (ui8)((s) >> 8))#endif#define ntohl(l)    htonl(l)#define ntohs(s)    htons(s)/*** Common Addresses*/#define INADDR_ANY        0x00000000#define INADDR_LOOPBACK   0x7F000001#define INADDR_BROADCAST  0xFFFFFFFF/*** Address Class Macros*/#define IP_CLASSA(a)    (((a) & 0x80000000) == 0x00000000)#define IP_CLASSB(a)    (((a) & 0xC0000000) == 0x80000000)#define IP_CLASSC(a)    (((a) & 0xE0000000) == 0xC0000000)#define IP_CLASSD(a)    (((a) & 0xF0000000) == 0xE0000000)#define IP_CLASSE(a)    (((a) & 0xF8000000) == 0xF0000000)/*** Domain and Protocol Family*/#define AF_INET         2#define PF_INET         2/*** Socket Types*/#define SOCK_STREAM     1#define SOCK_DGRAM      2/*** Protocol Types*/#define TCP             6#define UDP             17/*** ioctlsocket() Commands*/#define FIONBIO         1#define FIONREAD        2#define SIOCATMARK      3/*** Socket Option Names*/#define SO_REUSEADDR    0x0004#define SO_KEEPALIVE    0x0008#define SO_DONTROUTE    0x0010#define SO_BROADCAST    0x0020#define SO_LINGER       0x0080#define SO_OOBINLINE    0x0100#define SO_SNDBUF       0x1001#define SO_RCVBUF       0x1002#define SO_SNDTIMEO     0x1005#define SO_RCVTIMEO     0x1006#define SO_TYPE         0x1008#define TCP_NODELAY     0x1009#define SO_CALLBACK     0x100A#define SO_CONTIMEO     0x100B#define SO_NOCHECKSUM   0x100C#define SO_TOS          0x100D/*** Socket Option Levels*/#define SOL_SOCKET      0xFFFF#define IPPROTO_TCP     6#define IPPROTO_UDP     17/*** send() and recv() flags*/#define MSG_OOB         (1 << 0)#define MSG_PEEK        (1 << 1)#define MSG_DONTROUTE   (1 << 2)#define MSG_WAITALL     (1 << 3)#define MSG_DONTWAIT    (1 << 4)/*** shutdown() flags*/#define SHUT_RD         0#define SHUT_WR         1#define SHUT_RDWR       2/*** Socket Events (Posted to setsockopt() SO_CALLBACK handler)*/#define SE_DATA_ACKED   0x0001#define SE_CLOSED       0x0002#define SE_OPENED       0x0004#define SE_DATA_RCVD    0x0008#define SE_ACCEPTED     0x0010#define SE_URGENT       0x0020#define SE_SND_SHUT     0x0040#define SE_RCV_SHUT     0x0080#define SE_GOT_FIN      0x0100#define SE_ERROR        0xFFFF/*** select() socket set macros and prototype*/#define FD_ISSET(s, fdset)      ((fdset)->id[(s) - 1])#define FD_CLR(s, fdset)        ((fdset)->id[(s) - 1] = 0)#define FD_SET(s, fdset)        ((fdset)->id[(s) - 1] = 1)/***********************************************************************//* Type Definitions                                                    *//***********************************************************************/struct in_addr {		ui32 s_addr;};struct sockaddr_in{  ui16  sin_family;        /* AF_INET */  ui16  sin_port;  struct  in_addr sin_addr;  char  sin_zero[8];};typedef struct fd_set fd_set;struct timeval{  long tv_sec;    /* number of seconds to wait */  long tv_usec;   /* number of microseconds to wait */};struct linger{  ui16 l_onoff;   /* linger option on/off */  ui16 l_linger;  /* linger time */};struct fd_set{  ui8 id[MAX_NUM_SOCKETS];};/***********************************************************************//* Function Prototypes                                                 *//***********************************************************************//*** Sockets API*/int accept(int socket, void *addr, int *addrlen);int bind(int socket, void *addr, int addrlen);int closesocket(int socket);int connect(int socket, const void *addr, int addrlen);int getpeername(int socket, void *addr, int *addrlen);int gethostname(char *name, int namelen); int getsockname(int socket, void *addr, int *addrlen);int getsockopt(int socket, int level, int opt, void *oval, int *olen);void FD_ZERO(fd_set *fdset);ui32 inet_addr(const char *string);int ioctlsocket(int s, int request, void *argp);int listen(int socket, int backlog);int recv(int socket, void *buffer, int buflen, int flags);#define recv(s, dst, wanted, flags) recvfrom(s, dst, wanted, flags, 0, 0)int recvfrom(int socket, void *buffer, int buflen, int flags,             void *from, int *fromlen);int select(int maxp1, fd_set *fread, fd_set *fwrite, fd_set *fexcept,           const struct timeval *timeout);int send(int socket, const void *buffer, int buflen, int flags);#define send(s, src, wanted, flags) sendto(s, src, wanted, flags, 0, 0)int sendto(int socket, const void *buffer, int buflen, int flags,           void *to, int tolen);int setsockopt(int socket, int level, int opt_name, void *opt_value,               int opt_length);int shutdown(int sock, int how);int socket(int family, int type, int protocol);/*** Additional Functions*/ui32 getHostByName(const char *name);int  tcpPing(ui32 addr, unsigned int length, int verbose);int  tcpAddRoute(ui32 gw, ui32 addr, ui32 mask);int  tcpDelRoute(ui32 gw, ui32 addr, ui32 mask);void tcpDiag(int type);#define TCP_DIAG_ARP    (1 << 0)#define TCP_DIAG_BUFS   (1 << 1)#define TCP_DIAG_ROUTE  (1 << 2)#define TCP_DIAG_SOCK   (1 << 3)int  printIP(ui32 ip_addr);void printEth(void *eth_addr);/***********************************************************************//* Error Codes (written to errno)                                      *//***********************************************************************/typedef enum sock_errs{  EADDRINUSE = 300,  EADDRNOTAVAIL,  EAFNOSUPPORT,  ECOLL,  ECONNABORTED,  ECONNREFUSED,  ECONNRESET,  EDESTADDRREQ,  EDNS_FAILED,  EDNS_SERVER,  EHOSTUNREACH, /* 310 */  EINPROGRESS,  EISCONN,  EMSGSIZE,  ENETDOWN,  ENETUNREACH,  ENOBUFS,  ENOPROTOOPT,  ENOTCONN,  ENOTSOCK,  EOPNOTSUPP,   /* 320 */  EPFNOSUPPORT,  EPROTOTYPE,  ESHUTDOWN,  ESOCKTNOSUPPORT,  ETIMEDOUT,  EWOULDBLOCK} SocketErrors;#ifdef __cplusplus}#endif#endif /* _SOCKETS_H */

⌨️ 快捷键说明

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