8 #define INVALID_SOCKET (~0)
9 #define SOCKET_ERROR (-1)
16 * Option flags per-socket.
18 #define SO_DEBUG 0x0001 /* turn on debugging info recording */
19 #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
20 #define SO_REUSEADDR 0x0004 /* allow local address reuse */
21 #define SO_KEEPALIVE 0x0008 /* keep connections alive */
22 #define SO_DONTROUTE 0x0010 /* just use interface addresses */
23 #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
24 #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */
25 #define SO_LINGER 0x0080 /* linger on close if data present */
26 #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */
27 #define SO_REUSEPORT 0x0200 /* allow local address & port reuse */
29 #define SO_DONTLINGER (int)(~SO_LINGER)
32 * Additional options, not kept in so_options.
34 #define SO_SNDBUF 0x1001 /* send buffer size */
35 #define SO_RCVBUF 0x1002 /* receive buffer size */
36 #define SO_SNDLOWAT 0x1003 /* send low-water mark */
37 #define SO_RCVLOWAT 0x1004 /* receive low-water mark */
38 #define SO_SNDTIMEO 0x1005 /* send timeout */
39 #define SO_RCVTIMEO 0x1006 /* receive timeout */
40 #define SO_ERROR 0x1007 /* get error status and clear */
41 #define SO_TYPE 0x1008 /* get socket type */
46 * Structure used for manipulating linger option.
49 int l_onoff
; /* option on/off */
50 int l_linger
; /* linger time */
54 * Level number for (get/set)sockopt() to apply to socket itself.
56 #define SOL_SOCKET 0xffff /* options for socket level */
60 #define PF_INET AF_INET
61 #define PF_UNSPEC AF_UNSPEC
65 #define IPPROTO_UDP 17
68 #define INADDR_BROADCAST 0xffffffff
70 /* Flags we can use with send and recv. */
71 #define MSG_DONTWAIT 0x40 /* Nonblocking i/o for this operation only */
74 * Options for level IPPROTO_IP
80 #define IPTOS_TOS_MASK 0x1E
81 #define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK)
82 #define IPTOS_LOWDELAY 0x10
83 #define IPTOS_THROUGHPUT 0x08
84 #define IPTOS_RELIABILITY 0x04
85 #define IPTOS_LOWCOST 0x02
86 #define IPTOS_MINCOST IPTOS_LOWCOST
89 * Definitions for IP precedence (also in ip_tos) (hopefully unused)
91 #define IPTOS_PREC_MASK 0xe0
92 #define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK)
93 #define IPTOS_PREC_NETCONTROL 0xe0
94 #define IPTOS_PREC_INTERNETCONTROL 0xc0
95 #define IPTOS_PREC_CRITIC_ECP 0xa0
96 #define IPTOS_PREC_FLASHOVERRIDE 0x80
97 #define IPTOS_PREC_FLASH 0x60
98 #define IPTOS_PREC_IMMEDIATE 0x40
99 #define IPTOS_PREC_PRIORITY 0x20
100 #define IPTOS_PREC_ROUTINE 0x00
104 * Commands for ioctlsocket(), taken from the BSD file fcntl.h.
107 * Ioctl's have the command encoded in the lower word,
108 * and the size of any in or out parameters in the upper
109 * word. The high 2 bits of the upper word are used
110 * to encode the in/out status of the parameter; for now
111 * we restrict parameters to at most 128 bytes.
113 #if !defined(FIONREAD) || !defined(FIONBIO)
114 #define IOCPARM_MASK 0x7f /* parameters must be < 128 bytes */
115 #define IOC_VOID 0x20000000 /* no parameters */
116 #define IOC_OUT 0x40000000 /* copy out parameters */
117 #define IOC_IN 0x80000000 /* copy in parameters */
118 #define IOC_INOUT (IOC_IN|IOC_OUT)
119 /* 0x20000000 distinguishes new &
121 #define _IO(x,y) (IOC_VOID|((x)<<8)|(y))
123 #define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
125 #define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
129 #define FIONREAD _IOR('f', 127, unsigned long) /* get # bytes to read */
132 #define FIONBIO _IOW('f', 126, unsigned long) /* set/clear non-blocking i/o */
135 /* Socket I/O Controls */
137 #define SIOCSHIWAT _IOW('s', 0, unsigned long) /* set high watermark */
138 #define SIOCGHIWAT _IOR('s', 1, unsigned long) /* get high watermark */
139 #define SIOCSLOWAT _IOW('s', 2, unsigned long) /* set low watermark */
140 #define SIOCGLOWAT _IOR('s', 3, unsigned long) /* get low watermark */
141 #define SIOCATMARK _IOR('s', 7, unsigned long) /* at oob mark? */
145 #define O_NONBLOCK 04000U
150 #define FD_SETSIZE 16
151 #define FD_SET(n, p) ((p)->fd_bits[(n)/8] |= (1 << ((n) & 7)))
152 #define FD_CLR(n, p) ((p)->fd_bits[(n)/8] &= ~(1 << ((n) & 7)))
153 #define FD_ISSET(n,p) ((p)->fd_bits[(n)/8] & (1 << ((n) & 7)))
154 #define FD_ZERO(p) memset((void*)(p),0,sizeof(*(p)))
156 typedef struct fd_set
{
157 u8 fd_bits
[(FD_SETSIZE
+7)/8];
161 s32 tv_sec
; /* seconds */
162 s32 tv_usec
; /* and microseconds */
168 #define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */
170 #ifndef TCP_KEEPALIVE
171 #define TCP_KEEPALIVE 0x02 /* send KEEPALIVE probes when idle for pcb->keepalive miliseconds */
175 #define socklen_t u32
192 #define h_addr h_addr_list[0]
196 #define IP4_ADDR(ipaddr, a,b,c,d) (ipaddr)->s_addr = htonl(((u32)(a&0xff)<<24)|((u32)(b&0xff)<<16)|((u32)(c&0xff)<<8)|(u32)(d&0xff))
197 #define ip4_addr1(ipaddr) ((u32)(ntohl((ipaddr)->s_addr) >> 24) & 0xff)
198 #define ip4_addr2(ipaddr) ((u32)(ntohl((ipaddr)->s_addr) >> 16) & 0xff)
199 #define ip4_addr3(ipaddr) ((u32)(ntohl((ipaddr)->s_addr) >> 8) & 0xff)
200 #define ip4_addr4(ipaddr) ((u32)(ntohl((ipaddr)->s_addr)) & 0xff)
203 #define POLLIN 0x0001
204 #define POLLPRI 0x0002
205 #define POLLOUT 0x0004
206 #define POLLERR 0x0008
207 #define POLLHUP 0x0010
208 #define POLLNVAL 0x0020
225 struct in_addr sin_addr
;
236 char *h_name
; /* official name of host */
237 char **h_aliases
; /* alias list */
238 u16 h_addrtype
; /* host address type */
239 u16 h_length
; /* length of address */
240 char **h_addr_list
; /* list of addresses from name server */
249 u32
inet_addr(const char *cp
);
250 s8
inet_aton(const char *cp
, struct in_addr
*addr
);
251 char *inet_ntoa(struct in_addr addr
); /* returns ptr to static buffer; not reentrant! */
253 s32
if_config( char *local_ip
, char *netmask
, char *gateway
,bool use_dhcp
);
254 s32
if_configex(struct in_addr
*local_ip
,struct in_addr
*netmask
,struct in_addr
*gateway
,bool use_dhcp
);
258 typedef s32 (*netcallback
)(s32 result
, void *usrdata
);
259 s32
net_init_async(netcallback cb
, void *usrdata
);
260 s32
net_get_status(void);
261 void net_wc24cleanup();
266 s32
net_socket(u32 domain
,u32 type
,u32 protocol
);
267 s32
net_bind(s32 s
,struct sockaddr
*name
,socklen_t namelen
);
268 s32
net_listen(s32 s
,u32 backlog
);
269 s32
net_accept(s32 s
,struct sockaddr
*addr
,socklen_t
*addrlen
);
270 s32
net_connect(s32 s
,struct sockaddr
*,socklen_t
);
271 s32
net_write(s32 s
,const void *data
,s32 size
);
272 s32
net_send(s32 s
,const void *data
,s32 size
,u32 flags
);
273 s32
net_sendto(s32 s
,const void *data
,s32 len
,u32 flags
,struct sockaddr
*to
,socklen_t tolen
);
274 s32
net_recv(s32 s
,void *mem
,s32 len
,u32 flags
);
275 s32
net_recvfrom(s32 s
,void *mem
,s32 len
,u32 flags
,struct sockaddr
*from
,socklen_t
*fromlen
);
276 s32
net_read(s32 s
,void *mem
,s32 len
);
277 s32
net_close(s32 s
);
278 s32
net_select(s32 maxfdp1
,fd_set
*readset
,fd_set
*writeset
,fd_set
*exceptset
,struct timeval
*timeout
);
279 s32
net_setsockopt(s32 s
,u32 level
,u32 optname
,const void *optval
,socklen_t optlen
);
280 s32
net_ioctl(s32 s
, u32 cmd
, void *argp
);
281 s32
net_fcntl(s32 s
, u32 cmd
, u32 flags
);
282 s32
net_poll(struct pollsd
*sds
,s32 nsds
,s32 timeout
);
283 s32
net_shutdown(s32 s
, u32 how
);
285 struct hostent
* net_gethostbyname(const char *addrString
);