ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

sockets.h
Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
00003  * All rights reserved. 
00004  * 
00005  * Redistribution and use in source and binary forms, with or without modification, 
00006  * are permitted provided that the following conditions are met:
00007  *
00008  * 1. Redistributions of source code must retain the above copyright notice,
00009  *    this list of conditions and the following disclaimer.
00010  * 2. Redistributions in binary form must reproduce the above copyright notice,
00011  *    this list of conditions and the following disclaimer in the documentation
00012  *    and/or other materials provided with the distribution.
00013  * 3. The name of the author may not be used to endorse or promote products
00014  *    derived from this software without specific prior written permission. 
00015  *
00016  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
00017  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
00018  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
00019  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
00020  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
00021  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
00022  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
00023  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
00024  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
00025  * OF SUCH DAMAGE.
00026  *
00027  * This file is part of the lwIP TCP/IP stack.
00028  * 
00029  * Author: Adam Dunkels <adam@sics.se>
00030  *
00031  */
00032 
00033 
00034 #ifndef __LWIP_SOCKETS_H__
00035 #define __LWIP_SOCKETS_H__
00036 
00037 #include "lwip/opt.h"
00038 
00039 #if LWIP_SOCKET /* don't build if not configured for use in lwipopts.h */
00040 
00041 #include <stddef.h> /* for size_t */
00042 
00043 #include "lwip/ip_addr.h"
00044 #include "lwip/inet.h"
00045 
00046 #ifdef __cplusplus
00047 extern "C" {
00048 #endif
00049 
00050 /* members are in network byte order */
00051 struct sockaddr_in {
00052   u8_t sin_len;
00053   u8_t sin_family;
00054   u16_t sin_port;
00055   struct in_addr sin_addr;
00056   char sin_zero[8];
00057 };
00058 
00059 struct sockaddr {
00060   u8_t sa_len;
00061   u8_t sa_family;
00062   char sa_data[14];
00063 };
00064 
00065 #ifndef socklen_t
00066 #  define socklen_t u32_t
00067 #endif
00068 
00069 /* Socket protocol types (TCP/UDP/RAW) */
00070 #define SOCK_STREAM     1
00071 #define SOCK_DGRAM      2
00072 #define SOCK_RAW        3
00073 
00074 /*
00075  * Option flags per-socket. These must match the SOF_ flags in ip.h (checked in init.c)
00076  */
00077 #define  SO_DEBUG       0x0001 /* Unimplemented: turn on debugging info recording */
00078 #define  SO_ACCEPTCONN  0x0002 /* socket has had listen() */
00079 #define  SO_REUSEADDR   0x0004 /* Allow local address reuse */
00080 #define  SO_KEEPALIVE   0x0008 /* keep connections alive */
00081 #define  SO_DONTROUTE   0x0010 /* Unimplemented: just use interface addresses */
00082 #define  SO_BROADCAST   0x0020 /* permit to send and to receive broadcast messages (see IP_SOF_BROADCAST option) */
00083 #define  SO_USELOOPBACK 0x0040 /* Unimplemented: bypass hardware when possible */
00084 #define  SO_LINGER      0x0080 /* linger on close if data present */
00085 #define  SO_OOBINLINE   0x0100 /* Unimplemented: leave received OOB data in line */
00086 #define  SO_REUSEPORT   0x0200 /* Unimplemented: allow local address & port reuse */
00087 
00088 #define SO_DONTLINGER   ((int)(~SO_LINGER))
00089 
00090 /*
00091  * Additional options, not kept in so_options.
00092  */
00093 #define SO_SNDBUF    0x1001    /* Unimplemented: send buffer size */
00094 #define SO_RCVBUF    0x1002    /* receive buffer size */
00095 #define SO_SNDLOWAT  0x1003    /* Unimplemented: send low-water mark */
00096 #define SO_RCVLOWAT  0x1004    /* Unimplemented: receive low-water mark */
00097 #define SO_SNDTIMEO  0x1005    /* Unimplemented: send timeout */
00098 #define SO_RCVTIMEO  0x1006    /* receive timeout */
00099 #define SO_ERROR     0x1007    /* get error status and clear */
00100 #define SO_TYPE      0x1008    /* get socket type */
00101 #define SO_CONTIMEO  0x1009    /* Unimplemented: connect timeout */
00102 #define SO_NO_CHECK  0x100a    /* don't create UDP checksum */
00103 
00104 
00105 /*
00106  * Structure used for manipulating linger option.
00107  */
00108 struct linger {
00109        int l_onoff;                /* option on/off */
00110        int l_linger;               /* linger time */
00111 };
00112 
00113 /*
00114  * Level number for (get/set)sockopt() to apply to socket itself.
00115  */
00116 #define  SOL_SOCKET  0xfff    /* options for socket level */
00117 
00118 
00119 #define AF_UNSPEC       0
00120 #define AF_INET         2
00121 #define PF_INET         AF_INET
00122 #define PF_UNSPEC       AF_UNSPEC
00123 
00124 #define IPPROTO_IP      0
00125 #define IPPROTO_TCP     6
00126 #define IPPROTO_UDP     17
00127 #define IPPROTO_UDPLITE 136
00128 
00129 /* Flags we can use with send and recv. */
00130 #define MSG_PEEK       0x01    /* Peeks at an incoming message */
00131 #define MSG_WAITALL    0x02    /* Unimplemented: Requests that the function block until the full amount of data requested can be returned */
00132 #define MSG_OOB        0x04    /* Unimplemented: Requests out-of-band data. The significance and semantics of out-of-band data are protocol-specific */
00133 #define MSG_DONTWAIT   0x08    /* Nonblocking i/o for this operation only */
00134 #define MSG_MORE       0x10    /* Sender will send more */
00135 
00136 
00137 /*
00138  * Options for level IPPROTO_IP
00139  */
00140 #define IP_TOS             1
00141 #define IP_TTL             2
00142 
00143 #if LWIP_TCP
00144 /*
00145  * Options for level IPPROTO_TCP
00146  */
00147 #define TCP_NODELAY    0x01    /* don't delay send to coalesce packets */
00148 #define TCP_KEEPALIVE  0x02    /* send KEEPALIVE probes when idle for pcb->keep_idle milliseconds */
00149 #define TCP_KEEPIDLE   0x03    /* set pcb->keep_idle  - Same as TCP_KEEPALIVE, but use seconds for get/setsockopt */
00150 #define TCP_KEEPINTVL  0x04    /* set pcb->keep_intvl - Use seconds for get/setsockopt */
00151 #define TCP_KEEPCNT    0x05    /* set pcb->keep_cnt   - Use number of probes sent for get/setsockopt */
00152 #endif /* LWIP_TCP */
00153 
00154 #if LWIP_UDP && LWIP_UDPLITE
00155 /*
00156  * Options for level IPPROTO_UDPLITE
00157  */
00158 #define UDPLITE_SEND_CSCOV 0x01 /* sender checksum coverage */
00159 #define UDPLITE_RECV_CSCOV 0x02 /* minimal receiver checksum coverage */
00160 #endif /* LWIP_UDP && LWIP_UDPLITE*/
00161 
00162 
00163 #if LWIP_IGMP
00164 /*
00165  * Options and types for UDP multicast traffic handling
00166  */
00167 #define IP_ADD_MEMBERSHIP  3
00168 #define IP_DROP_MEMBERSHIP 4
00169 #define IP_MULTICAST_TTL   5
00170 #define IP_MULTICAST_IF    6
00171 #define IP_MULTICAST_LOOP  7
00172 
00173 typedef struct ip_mreq {
00174     struct in_addr imr_multiaddr; /* IP multicast address of group */
00175     struct in_addr imr_interface; /* local IP address of interface */
00176 } ip_mreq;
00177 #endif /* LWIP_IGMP */
00178 
00179 /*
00180  * The Type of Service provides an indication of the abstract
00181  * parameters of the quality of service desired.  These parameters are
00182  * to be used to guide the selection of the actual service parameters
00183  * when transmitting a datagram through a particular network.  Several
00184  * networks offer service precedence, which somehow treats high
00185  * precedence traffic as more important than other traffic (generally
00186  * by accepting only traffic above a certain precedence at time of high
00187  * load).  The major choice is a three way tradeoff between low-delay,
00188  * high-reliability, and high-throughput.
00189  * The use of the Delay, Throughput, and Reliability indications may
00190  * increase the cost (in some sense) of the service.  In many networks
00191  * better performance for one of these parameters is coupled with worse
00192  * performance on another.  Except for very unusual cases at most two
00193  * of these three indications should be set.
00194  */
00195 #define IPTOS_TOS_MASK          0x1E
00196 #define IPTOS_TOS(tos)          ((tos) & IPTOS_TOS_MASK)
00197 #define IPTOS_LOWDELAY          0x10
00198 #define IPTOS_THROUGHPUT        0x08
00199 #define IPTOS_RELIABILITY       0x04
00200 #define IPTOS_LOWCOST           0x02
00201 #define IPTOS_MINCOST           IPTOS_LOWCOST
00202 
00203 /*
00204  * The Network Control precedence designation is intended to be used
00205  * within a network only.  The actual use and control of that
00206  * designation is up to each network. The Internetwork Control
00207  * designation is intended for use by gateway control originators only.
00208  * If the actual use of these precedence designations is of concern to
00209  * a particular network, it is the responsibility of that network to
00210  * control the access to, and use of, those precedence designations.
00211  */
00212 #define IPTOS_PREC_MASK                 0xe0
00213 #define IPTOS_PREC(tos)                ((tos) & IPTOS_PREC_MASK)
00214 #define IPTOS_PREC_NETCONTROL           0xe0
00215 #define IPTOS_PREC_INTERNETCONTROL      0xc0
00216 #define IPTOS_PREC_CRITIC_ECP           0xa0
00217 #define IPTOS_PREC_FLASHOVERRIDE        0x80
00218 #define IPTOS_PREC_FLASH                0x60
00219 #define IPTOS_PREC_IMMEDIATE            0x40
00220 #define IPTOS_PREC_PRIORITY             0x20
00221 #define IPTOS_PREC_ROUTINE              0x00
00222 
00223 
00224 /*
00225  * Commands for ioctlsocket(),  taken from the BSD file fcntl.h.
00226  * lwip_ioctl only supports FIONREAD and FIONBIO, for now
00227  *
00228  * Ioctl's have the command encoded in the lower word,
00229  * and the size of any in or out parameters in the upper
00230  * word.  The high 2 bits of the upper word are used
00231  * to encode the in/out status of the parameter; for now
00232  * we restrict parameters to at most 128 bytes.
00233  */
00234 #if !defined(FIONREAD) || !defined(FIONBIO)
00235 #define IOCPARM_MASK    0x7fU           /* parameters must be < 128 bytes */
00236 #define IOC_VOID        0x20000000UL    /* no parameters */
00237 #define IOC_OUT         0x40000000UL    /* copy out parameters */
00238 #define IOC_IN          0x80000000UL    /* copy in parameters */
00239 #define IOC_INOUT       (IOC_IN|IOC_OUT)
00240                                         /* 0x20000000 distinguishes new &
00241                                            old ioctl's */
00242 #define _IO(x,y)        (IOC_VOID|((x)<<8)|(y))
00243 
00244 #define _IOR(x,y,t)     (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
00245 
00246 #define _IOW(x,y,t)     (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y))
00247 #endif /* !defined(FIONREAD) || !defined(FIONBIO) */
00248 
00249 #ifndef FIONREAD
00250 #define FIONREAD    _IOR('f', 127, unsigned long) /* get # bytes to read */
00251 #endif
00252 #ifndef FIONBIO
00253 #define FIONBIO     _IOW('f', 126, unsigned long) /* set/clear non-blocking i/o */
00254 #endif
00255 
00256 /* Socket I/O Controls: unimplemented */
00257 #ifndef SIOCSHIWAT
00258 #define SIOCSHIWAT  _IOW('s',  0, unsigned long)  /* set high watermark */
00259 #define SIOCGHIWAT  _IOR('s',  1, unsigned long)  /* get high watermark */
00260 #define SIOCSLOWAT  _IOW('s',  2, unsigned long)  /* set low watermark */
00261 #define SIOCGLOWAT  _IOR('s',  3, unsigned long)  /* get low watermark */
00262 #define SIOCATMARK  _IOR('s',  7, unsigned long)  /* at oob mark? */
00263 #endif
00264 
00265 /* commands for fnctl */
00266 #ifndef F_GETFL
00267 #define F_GETFL 3
00268 #endif
00269 #ifndef F_SETFL
00270 #define F_SETFL 4
00271 #endif
00272 
00273 /* File status flags and file access modes for fnctl,
00274    these are bits in an int. */
00275 #ifndef O_NONBLOCK
00276 #define O_NONBLOCK  1 /* nonblocking I/O */
00277 #endif
00278 #ifndef O_NDELAY
00279 #define O_NDELAY    1 /* same as O_NONBLOCK, for compatibility */
00280 #endif
00281 
00282 #ifndef SHUT_RD
00283   #define SHUT_RD   0
00284   #define SHUT_WR   1
00285   #define SHUT_RDWR 2
00286 #endif
00287 
00288 /* FD_SET used for lwip_select */
00289 #ifndef FD_SET
00290   #undef  FD_SETSIZE
00291   /* Make FD_SETSIZE match NUM_SOCKETS in socket.c */
00292   #define FD_SETSIZE    MEMP_NUM_NETCONN
00293   #define FD_SET(n, p)  ((p)->fd_bits[(n)/8] |=  (1 << ((n) & 7)))
00294   #define FD_CLR(n, p)  ((p)->fd_bits[(n)/8] &= ~(1 << ((n) & 7)))
00295   #define FD_ISSET(n,p) ((p)->fd_bits[(n)/8] &   (1 << ((n) & 7)))
00296   #define FD_ZERO(p)    memset((void*)(p),0,sizeof(*(p)))
00297 
00298   typedef struct fd_set {
00299           unsigned char fd_bits [(FD_SETSIZE+7)/8];
00300         } fd_set;
00301 
00302 #endif /* FD_SET */
00303 
00306 #ifndef LWIP_TIMEVAL_PRIVATE
00307 #define LWIP_TIMEVAL_PRIVATE 1
00308 #endif
00309 
00310 #if LWIP_TIMEVAL_PRIVATE
00311 struct timeval {
00312   long    tv_sec;         /* seconds */
00313   long    tv_usec;        /* and microseconds */
00314 };
00315 #endif /* LWIP_TIMEVAL_PRIVATE */
00316 
00317 void lwip_socket_init(void);
00318 
00319 int lwip_accept(int s, struct sockaddr *addr, socklen_t *addrlen);
00320 int lwip_bind(int s, const struct sockaddr *name, socklen_t namelen);
00321 int lwip_shutdown(int s, int how);
00322 int lwip_getpeername (int s, struct sockaddr *name, socklen_t *namelen);
00323 int lwip_getsockname (int s, struct sockaddr *name, socklen_t *namelen);
00324 int lwip_getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen);
00325 int lwip_setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen);
00326 int lwip_close(int s);
00327 int lwip_connect(int s, const struct sockaddr *name, socklen_t namelen);
00328 int lwip_listen(int s, int backlog);
00329 int lwip_recv(int s, void *mem, size_t len, int flags);
00330 int lwip_read(int s, void *mem, size_t len);
00331 int lwip_recvfrom(int s, void *mem, size_t len, int flags,
00332       struct sockaddr *from, socklen_t *fromlen);
00333 int lwip_send(int s, const void *dataptr, size_t size, int flags);
00334 int lwip_sendto(int s, const void *dataptr, size_t size, int flags,
00335     const struct sockaddr *to, socklen_t tolen);
00336 int lwip_socket(int domain, int type, int protocol);
00337 int lwip_write(int s, const void *dataptr, size_t size);
00338 int lwip_select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,
00339                 struct timeval *timeout);
00340 int lwip_ioctl(int s, long cmd, void *argp);
00341 int lwip_fcntl(int s, int cmd, int val);
00342 
00343 #if LWIP_COMPAT_SOCKETS
00344 #define accept(a,b,c)         lwip_accept(a,b,c)
00345 #define bind(a,b,c)           lwip_bind(a,b,c)
00346 #define shutdown(a,b)         lwip_shutdown(a,b)
00347 #define closesocket(s)        lwip_close(s)
00348 #define connect(a,b,c)        lwip_connect(a,b,c)
00349 #define getsockname(a,b,c)    lwip_getsockname(a,b,c)
00350 #define getpeername(a,b,c)    lwip_getpeername(a,b,c)
00351 #define setsockopt(a,b,c,d,e) lwip_setsockopt(a,b,c,d,e)
00352 #define getsockopt(a,b,c,d,e) lwip_getsockopt(a,b,c,d,e)
00353 #define listen(a,b)           lwip_listen(a,b)
00354 #define recv(a,b,c,d)         lwip_recv(a,b,c,d)
00355 #define recvfrom(a,b,c,d,e,f) lwip_recvfrom(a,b,c,d,e,f)
00356 #define send(a,b,c,d)         lwip_send(a,b,c,d)
00357 #define sendto(a,b,c,d,e,f)   lwip_sendto(a,b,c,d,e,f)
00358 #define socket(a,b,c)         lwip_socket(a,b,c)
00359 #define select(a,b,c,d,e)     lwip_select(a,b,c,d,e)
00360 #define ioctlsocket(a,b,c)    lwip_ioctl(a,b,c)
00361 
00362 #if LWIP_POSIX_SOCKETS_IO_NAMES
00363 #define read(a,b,c)           lwip_read(a,b,c)
00364 #define write(a,b,c)          lwip_write(a,b,c)
00365 #define close(s)              lwip_close(s)
00366 #endif /* LWIP_POSIX_SOCKETS_IO_NAMES */
00367 
00368 #endif /* LWIP_COMPAT_SOCKETS */
00369 
00370 #ifdef __cplusplus
00371 }
00372 #endif
00373 
00374 #endif /* LWIP_SOCKET */
00375 
00376 #endif /* __LWIP_SOCKETS_H__ */

Generated on Sat May 26 2012 04:34:59 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.