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

📄 rcf_socket.h

📁 周立功magic2200实验箱flash下载演示工程
💻 H
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: rcf_socket.h
** Last modified Date:  2004-11-27
** Last Version: 1.0
** Descriptions: socket HEAD FILE
**
**------------------------------------------------------------------------------------------------------
** Created By: Yehaoben
** Created date:   2004-11-27
** Version: 1.0
** Descriptions: First version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/

#ifdef SOCKET_GLOBALS
#define SOCKET_EXT
#else
#define SOCKET_EXT extern 
#endif 

#define	SOCKET	unsigned char

#define PF_INET		0
#define AF_INET		1

/*
 * Level number for (get/set)sockopt() to apply to socket itself.
 */
#define SOL_SOCKET      0xffff          /* options for socket level */

/*
 * Types
 */
#define SOCK_STREAM     1               /* stream socket */
#define SOCK_DGRAM      2               /* datagram socket */
#define SOCK_RAW        3               /* raw-protocol interface */
#define SOCK_RDM        4               /* reliably-delivered message */
#define SOCK_SEQPACKET  5               /* sequenced packet stream */

/*
 * Option flags per-socket.
 */
#define SO_DEBUG        0x0001          /* turn on debugging info recording */
#define SO_ACCEPTCONN   0x0002          /* socket has had listen() */
#define SO_REUSEADDR    0x0004          /* allow local address reuse */
#define SO_KEEPALIVE    0x0008          /* keep connections alive */
#define SO_DONTROUTE    0x0010          /* just use interface addresses */
#define SO_BROADCAST    0x0020          /* permit sending of broadcast msgs */
#define SO_USELOOPBACK  0x0040          /* bypass hardware when possible */
#define SO_LINGER       0x0080          /* linger on close if data present */
#define SO_OOBINLINE    0x0100          /* leave received OOB data in line */

#define SO_DONTLINGER   (u_int)(~SO_LINGER)

/*
 * Additional options.
 */
#define SO_SNDBUF       0x1001          /* send buffer size */
#define SO_RCVBUF       0x1002          /* receive buffer size */
#define SO_SNDLOWAT     0x1003          /* send low-water mark */
#define SO_RCVLOWAT     0x1004          /* receive low-water mark */
#define SO_SNDTIMEO     0x1005          /* send timeout */
#define SO_RCVTIMEO     0x1006          /* receive timeout */
#define SO_ERROR        0x1007          /* get error status and clear */
#define SO_TYPE         0x1008          /* get socket type */



#define TCP_PROTOCOL	0
#define UDP_PROTOCOL	1

#ifndef	MAX_TCP_LINKS	
#define MAX_TCP_LINKS	0
#endif

#ifndef	MAX_UDP_LINKS	
#define MAX_UDP_LINKS	0
#endif

#define MAX_SOCKETS	MAX_TCP_LINKS+MAX_UDP_LINKS

#define INVALID_SOCKET  (SOCKET)(~0)
#define SOCKET_ERROR    (SOCKET)(-1)
#define SOCKET_RCV_ERROR	(unsigned short)(-1)
#define SOCKET_SENFM_ERROR	SOCKET_RCV_ERROR
#define SOCKET_SEN_ERROR	(unsigned int)(-1)

/************ error reasons ********************/
/*
 * All Zlg Sockets error constants are biased by ZLGBASEERR from
 * the "normal"
 */
#define ZLGBASEERR              10000
/*
 * ZLG Sockets definitions of regular C error constants
 */
#define ZLGEINTR                (ZLGBASEERR+4)
#define ZLGEBADF                (ZLGBASEERR+9)
#define ZLGEACCES               (ZLGBASEERR+13)
#define ZLGEFAULT               (ZLGBASEERR+14)
/* 地址长度太小 (bind) */
#define ZLGEINVAL				(ZLGBASEERR+22)
/* 在ACCEPT前未激活listen,(accpet) */
#define ZLGEMFILE               (ZLGBASEERR+24)
/* 调用accept时队列为空, (accpet) */
/*
 * ZLG Sockets definitions of regular Berkeley error constants
 */
#define ZLGEWOULDBLOCK          (ZLGBASEERR+35)
#define ZLGEINPROGRESS          (ZLGBASEERR+36)
#define ZLGEALREADY             (ZLGBASEERR+37)
#define ZLGENOTSOCK             (ZLGBASEERR+38) /* 描述字不是一个SOCKET (bind,listen)*/
#define ZLGEDESTADDRREQ         (ZLGBASEERR+39)
#define ZLGEMSGSIZE             (ZLGBASEERR+40)
#define ZLGEPROTOTYPE           (ZLGBASEERR+41)	/* 指定的协议不适用于本SOCKET (socket)*/
#define ZLGENOPROTOOPT          (ZLGBASEERR+42)
#define ZLGEPROTONOSUPPORT      (ZLGBASEERR+43) /* 不支持指定的协议 (socket)*/
#define ZLGESOCKTNOSUPPORT      (ZLGBASEERR+44)
#define ZLGEOPNOTSUPP           (ZLGBASEERR+45) /* socket不正常调用listen (listen) */
#define ZLGEPFNOSUPPORT         (ZLGBASEERR+46)
#define ZLGEAFNOSUPPORT         (ZLGBASEERR+47)
#define ZLGEADDRINUSE           (ZLGBASEERR+48) /* 所定端口已在使用 (bind,listen) */
#define ZLGEADDRNOTAVAIL        (ZLGBASEERR+49)
#define ZLGENETDOWN             (ZLGBASEERR+50)
#define ZLGENETUNREACH          (ZLGBASEERR+51)
#define ZLGENETRESET            (ZLGBASEERR+52)
#define ZLGECONNABORTED         (ZLGBASEERR+53)
#define ZLGECONNRESET           (ZLGBASEERR+54)
#define ZLGENOBUFS              (ZLGBASEERR+55) /* 无可用缓存区 (socket,listen,accept)*/
#define ZLGEISCONN              (ZLGBASEERR+56)
#define ZLGENOTCONN             (ZLGBASEERR+57)
#define ZLGESHUTDOWN            (ZLGBASEERR+58)
#define ZLGETOOMANYREFS         (ZLGBASEERR+59)
#define ZLGETIMEDOUT            (ZLGBASEERR+60)
#define ZLGECONNREFUSED         (ZLGBASEERR+61)
#define ZLGELOOP                (ZLGBASEERR+62)
#define ZLGENAMETOOLONG         (ZLGBASEERR+63)
#define ZLGEHOSTDOWN            (ZLGBASEERR+64)
#define ZLGEHOSTUNREACH         (ZLGBASEERR+65)
#define ZLGENOTEMPTY            (ZLGBASEERR+66)
#define ZLGEPROCLIM             (ZLGBASEERR+67)
#define ZLGEUSERS               (ZLGBASEERR+68)
#define ZLGEDQUOT               (ZLGBASEERR+69)
#define ZLGESTALE               (ZLGBASEERR+70)
#define ZLGEREMOTE              (ZLGBASEERR+71)

#define ZLGEDISCON              (ZLGBASEERR+101)

/*
 * Extended ZLG Sockets error constant definitions
 */
#define ZLGSYSNOTREADY          (ZLGBASEERR+91)
#define ZLGVERNOTSUPPORTED      (ZLGBASEERR+92)
#define ZLGNOTINITIALISED       (ZLGBASEERR+93)	/* 使用该API之前应先初始化,调用socket (bind,listen) */
#define ZLGNOTMOREUDPLINK       (ZLGBASEERR+94) /* UDP 连接不够 (socket) */

/*
 * Error return codes from gethostbyname() and gethostbyaddr()
 * (when using the resolver). Note that these errors are
 * retrieved via ZLGGetLastError() and must therefore follow
 * the rules for avoiding clashes with error numbers from
 * specific implementations or language run-time systems.
 * For this reason the codes are based at ZLGBASEERR+1001.
 * Note also that [ZLG]NO_ADDRESS is defined only for
 * compatibility purposes.
 */


/********************************************************************************************************
**                             Structure Define
********************************************************************************************************/
typedef struct {
			uint8 		State;				/* BIT5 ENABLE */
			uint16		protocol;
			uint16		af;
			uint16		type;
			uint8		My_Ip[4];
			uint16		My_Port;
			uint16		Max_Queue;
			uint8		queue[MAX_TCP_LINKS];
			uint8		Udp_Queue;
			uint8		BCFlag;//广播标志
			}SOCKET_ST;
struct	sockaddr{
			uint16		sin_family;
			uint8		sin_addr[4];
			uint16		sin_port;
	};
/********************************************************************************************************
**                              Global Variables Define
********************************************************************************************************/
SOCKET_EXT SOCKET_ST Zlg_Socket[MAX_SOCKETS];	
SOCKET_EXT uint16		ZLGSocketErr;
/********************************************************************************************************
**                              Function Define
********************************************************************************************************/

SOCKET_EXT 	SOCKET socket( uint16 af, uint16 type, uint16 protocol);
SOCKET_EXT 	int bind( SOCKET s, struct sockaddr * name,uint16 namelen);
SOCKET_EXT 	int listen( SOCKET s, uint16 backlog );
SOCKET_EXT 	uint8 accept( SOCKET s, struct sockaddr *addr, int *addrlen );
SOCKET_EXT 	uint8 connect(SOCKET s, struct sockaddr * addr,uint16 addrlen); 
SOCKET_EXT 	uint16 recv( uint8 num, uint8 *buf, uint16 len, int flags );
SOCKET_EXT 	uint32 send( uint8 num, uint8 *buf, uint32 len, int flags );
SOCKET_EXT 	uint16 sendfrm( uint8 num, uint8 *buf, uint16 len, int flags );
SOCKET_EXT 	uint16 sendto( SOCKET s, uint8 *buf, uint16 len, int flags, struct sockaddr *to, uint16 tolen );
SOCKET_EXT 	uint16 recvfrom( SOCKET s, uint8 *buf, uint16 len, int flags, struct sockaddr *from, uint16 *fromlen );
SOCKET_EXT 	uint8 close(uint8 num);
SOCKET_EXT 	int closesocket( SOCKET s );


SOCKET_EXT 	uint8 TCP_OPEN(SOCKET s, uint8 A_P, struct sockaddr * addr,uint16 addrlen);
SOCKET_EXT 	uint8 TCP_Abort(uint8 num);
SOCKET_EXT 	uint8 TCP_Status(uint8 num);

SOCKET_EXT void getlocalip(uint8 * outptr,uint8 num);
SOCKET_EXT int getpeername( SOCKET s, struct sockaddr *name,int *namelen);
SOCKET_EXT int getsockname( SOCKET s, struct sockaddr * name,int *namelen);
SOCKET_EXT int getsockopt( SOCKET s, int level, int optname, uint8 *optval, int *optlen);

SOCKET_EXT int getsockcliaddr( uint8 linknum, struct sockaddr * addr,int  * addrlen);
SOCKET_EXT uint32 htonl( uint32 hostlong);
SOCKET_EXT uint16 htons( uint16 hostshort);
SOCKET_EXT uint32 inet_addr(char * inaddr);
SOCKET_EXT void inet_ntoa(uint8 *in , char * out);
SOCKET_EXT uint32 ntohl(uint32 netlong);
SOCKET_EXT uint16 ntohs(uint16 netlong);
SOCKET_EXT 	int ZLGGetLastError(void);

⌨️ 快捷键说明

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