📄 sockets.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 + -