/* cygwin/socket.h This file is part of Cygwin. This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ #ifndef _CYGWIN_SOCKET_H #define _CYGWIN_SOCKET_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include /* Keep #define socklen_t for backward compatibility. */ #ifndef socklen_t typedef __socklen_t socklen_t; #define socklen_t socklen_t #endif typedef __sa_family_t sa_family_t; #ifndef __INSIDE_CYGWIN_NET__ struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ }; /* Definition of sockaddr_storage according to SUSv3. */ #define _SS_MAXSIZE 128 /* Maximum size. */ #define _SS_ALIGNSIZE (sizeof (int64_t))/* Desired alignment. */ #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof (sa_family_t)) #define _SS_PAD2SIZE (_SS_MAXSIZE - (sizeof (sa_family_t) \ + _SS_PAD1SIZE + _SS_ALIGNSIZE)) struct sockaddr_storage { sa_family_t ss_family; char _ss_pad1[_SS_PAD1SIZE]; int64_t __ss_align; char _ss_pad2[_SS_PAD2SIZE]; }; #endif #include /* arch-dependent defines */ #include /* the SIOCxxx I/O controls */ #include /* iovec support */ #include /* struct ucred */ struct linger { unsigned short l_onoff; /* Linger active */ unsigned short l_linger; /* How long to linger for */ }; struct msghdr { void * msg_name; /* Socket name */ socklen_t msg_namelen; /* Length of name */ struct iovec * msg_iov; /* Data blocks */ int msg_iovlen; /* Number of blocks */ void * msg_control; /* Ancillary data */ socklen_t msg_controllen; /* Ancillary data buffer length */ int msg_flags; /* Received flags on recvmsg */ }; struct cmsghdr { /* Amazing but true: The type of cmsg_len should be socklen_t but, just as on Linux, the definition of the kernel is incompatible with this, so the Windows socket headers define cmsg_len as SIZE_T. */ size_t cmsg_len; /* Length of cmsghdr + data */ int cmsg_level; /* Protocol */ int cmsg_type; /* Protocol type */ }; #define CMSG_ALIGN(len) \ (((len) + __alignof__ (struct cmsghdr) - 1) \ & ~(__alignof__ (struct cmsghdr) - 1)) #define CMSG_LEN(len) \ (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) #define CMSG_SPACE(len) \ (CMSG_ALIGN (sizeof (struct cmsghdr)) + CMSG_ALIGN(len)) #define CMSG_FIRSTHDR(mhdr) \ ({ \ struct msghdr *_m = (struct msghdr *) mhdr; \ (unsigned) (_m)->msg_controllen >= sizeof (struct cmsghdr) \ ? (struct cmsghdr *) (_m)->msg_control \ : (struct cmsghdr *) NULL; \ }) #define CMSG_NXTHDR(mhdr,cmsg) \ ({ \ struct msghdr *_m = (struct msghdr *) mhdr; \ struct cmsghdr *_c = (struct cmsghdr *) cmsg; \ ((char *) _c + CMSG_SPACE (_c->cmsg_len) \ > (char *) _m->msg_control + _m->msg_controllen) \ ? (struct cmsghdr *) NULL \ : (struct cmsghdr *) ((char *) _c + CMSG_ALIGN (_c->cmsg_len)); \ }) #define CMSG_DATA(cmsg) \ ((unsigned char *) ((struct cmsghdr *)(cmsg) + 1)) /* "Socket"-level control message types: */ #define SCM_RIGHTS 0x01 /* descriptor passing (array of int) */ #define SCM_CREDENTIALS 0x02 /* credential passing (struct ucred) */ #ifdef __INSIDE_CYGWIN__ /* Definition of struct msghdr up to release 1.5.18 */ struct OLD_msghdr { void * msg_name; /* Socket name */ int msg_namelen; /* Length of name */ struct iovec * msg_iov; /* Data blocks */ int msg_iovlen; /* Number of blocks */ void * msg_accrights; /* Per protocol magic */ /* (eg BSD descriptor passing) */ int msg_accrightslen; /* Length of rights list */ }; #endif /* Socket types. */ #define SOCK_STREAM 1 /* stream (connection) socket */ #define SOCK_DGRAM 2 /* datagram (conn.less) socket */ #define SOCK_RAW 3 /* raw socket */ #define SOCK_RDM 4 /* reliably-delivered message */ #define SOCK_SEQPACKET 5 /* sequential packet socket */ /* defines SOCK_NONBLOCK / SOCK_CLOEXEC */ #include /* Supported address families. */ /* * Address families. */ #define AF_UNSPEC 0 /* unspecified */ /* FIXME: This is for testing only, while developing the new fhandler_socket_unix class. */ #if defined (__INSIDE_CYGWIN__) && defined (__WITH_AF_UNIX) #define AF_UNIX 31 #else #define AF_UNIX 1 /* local to host (pipes, portals) */ #endif #define AF_LOCAL 1 /* POSIX name for AF_UNIX */ #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ #define AF_IMPLINK 3 /* arpanet imp addresses */ #define AF_PUP 4 /* pup protocols: e.g. BSP */ #define AF_CHAOS 5 /* mit CHAOS protocols */ #define AF_NS 6 /* XEROX NS protocols */ #define AF_ISO 7 /* ISO protocols */ #define AF_OSI AF_ISO /* OSI is ISO */ #define AF_ECMA 8 /* european computer manufacturers */ #define AF_DATAKIT 9 /* datakit protocols */ #define AF_CCITT 10 /* CCITT protocols, X.25 etc */ #define AF_SNA 11 /* IBM SNA */ #define AF_DECnet 12 /* DECnet */ #define AF_DLI 13 /* Direct data link interface */ #define AF_LAT 14 /* LAT */ #define AF_HYLINK 15 /* NSC Hyperchannel */ #define AF_APPLETALK 16 /* AppleTalk */ #define AF_NETBIOS 17 /* NetBios-style addresses */ #define AF_INET6 23 /* IP version 6 */ #define AF_MAX 32 /* * Protocol families, same as address families for now. */ #define PF_UNSPEC AF_UNSPEC #define PF_UNIX AF_UNIX #define PF_LOCAL AF_LOCAL #define PF_INET AF_INET #define PF_IMPLINK AF_IMPLINK #define PF_PUP AF_PUP #define PF_CHAOS AF_CHAOS #define PF_NS AF_NS #define PF_ISO AF_ISO #define PF_OSI AF_OSI #define PF_ECMA AF_ECMA #define PF_DATAKIT AF_DATAKIT #define PF_CCITT AF_CCITT #define PF_SNA AF_SNA #define PF_DECnet AF_DECnet #define PF_DLI AF_DLI #define PF_LAT AF_LAT #define PF_HYLINK AF_HYLINK #define PF_APPLETALK AF_APPLETALK #define PF_NETBIOS AF_NETBIOS #define PF_INET6 AF_INET6 #define PF_MAX AF_MAX /* Maximum queue length specificable by listen. */ #define SOMAXCONN 0x7fffffff /* Flags we can use with send/ and recv. */ #define MSG_OOB 0x1 /* process out-of-band data */ #define MSG_PEEK 0x2 /* peek at incoming message */ #define MSG_DONTROUTE 0x4 /* send without using routing tables */ #define MSG_WAITALL 0x8 /* wait for all requested bytes */ #define MSG_DONTWAIT 0x10 /* selective non-blocking operation */ #define MSG_NOSIGNAL 0x20 /* Don't raise SIGPIPE */ #define MSG_TRUNC 0x0100 /* Normal data truncated */ #define MSG_CTRUNC 0x0200 /* Control data truncated */ /* Windows-specific flag values returned by recvmsg. */ #define MSG_BCAST 0x0400 /* Broadcast datagram */ #define MSG_MCAST 0x0800 /* Multicast datagram */ /* AF_UNIX specific */ #define MSG_CMSG_CLOEXEC 0x1000 /* Set O_CLOEXEC on fd's passed via SCM_RIGHTS */ /* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx */ #define SOL_IP 0 #define SOL_IPV6 41 #define SOL_IPX 256 #define SOL_AX25 257 #define SOL_ATALK 258 #define SOL_NETROM 259 #define SOL_TCP 6 #define SOL_UDP 17 /* IP options */ #ifndef IPTOS_LOWDELAY #define IPTOS_LOWDELAY 0x10 #define IPTOS_THROUGHPUT 0x08 #define IPTOS_RELIABILITY 0x04 #endif /* These need to appear somewhere around here */ #define IP_DEFAULT_MULTICAST_TTL 1 #define IP_DEFAULT_MULTICAST_LOOP 1 #define IP_MAX_MEMBERSHIPS 20 /* IP options for use with getsockopt/setsockopt */ #define IP_OPTIONS 1 #define IP_HDRINCL 2 #define IP_TOS 3 #define IP_TTL 4 #define IP_MULTICAST_IF 9 #define IP_MULTICAST_TTL 10 #define IP_MULTICAST_LOOP 11 #define IP_ADD_MEMBERSHIP 12 #define IP_DROP_MEMBERSHIP 13 #define IP_DONTFRAGMENT 14 #define IP_ADD_SOURCE_MEMBERSHIP 15 #define IP_DROP_SOURCE_MEMBERSHIP 16 #define IP_BLOCK_SOURCE 17 #define IP_UNBLOCK_SOURCE 18 #define IP_PKTINFO 19 #define IP_UNICAST_IF 31 /* IPv6 options for use with getsockopt/setsockopt */ #define IPV6_HOPOPTS 1 #define IPV6_UNICAST_HOPS 4 #define IPV6_MULTICAST_IF 9 #define IPV6_MULTICAST_HOPS 10 #define IPV6_MULTICAST_LOOP 11 #define IPV6_ADD_MEMBERSHIP 12 #define IPV6_DROP_MEMBERSHIP 13 #define IPV6_JOIN_GROUP IPV6_ADD_MEMBERSHIP #define IPV6_LEAVE_GROUP IPV6_DROP_MEMBERSHIP #define IPV6_DONTFRAG 14 #define IPV6_PKTINFO 19 #define IPV6_HOPLIMIT 21 #define IPV6_CHECKSUM 26 #define IPV6_V6ONLY 27 #define IPV6_UNICAST_IF 31 #define IPV6_RTHDR 32 #define IPV6_RECVRTHDR 38 #define IPV6_TCLASS 39 #define IPV6_RECVTCLASS 40 /* IP agnostic options for use with getsockopt/setsockopt */ #define MCAST_JOIN_GROUP 41 #define MCAST_LEAVE_GROUP 42 #define MCAST_BLOCK_SOURCE 43 #define MCAST_UNBLOCK_SOURCE 44 #define MCAST_JOIN_SOURCE_GROUP 45 #define MCAST_LEAVE_SOURCE_GROUP 46 #ifndef __INSIDE_CYGWIN_NET__ #define MCAST_INCLUDE 0 #define MCAST_EXCLUDE 1 #endif /* Old WinSock1 values, needed internally */ #ifdef __INSIDE_CYGWIN__ #define _WS1_IP_OPTIONS 1 #define _WS1_IP_MULTICAST_IF 2 #define _WS1_IP_MULTICAST_TTL 3 #define _WS1_IP_MULTICAST_LOOP 4 #define _WS1_IP_ADD_MEMBERSHIP 5 #define _WS1_IP_DROP_MEMBERSHIP 6 #define _WS1_IP_TTL 7 #define _WS1_IP_TOS 8 #define _WS1_IP_DONTFRAGMENT 9 #endif /* IPX options */ #define IPX_TYPE 1 /* TCP options - this way around because someone left a set in the c library includes */ #ifndef TCP_NODELAY #define TCP_NODELAY 0x0001 #define TCP_MAXSEG 2 #endif /* SUS symbolic values for the second parm to shutdown(2) */ #define SHUT_RD 0 /* == Win32 SD_RECEIVE */ #define SHUT_WR 1 /* == Win32 SD_SEND */ #define SHUT_RDWR 2 /* == Win32 SD_BOTH */ /* The various priorities. */ #define SOPRI_INTERACTIVE 0 #define SOPRI_NORMAL 1 #define SOPRI_BACKGROUND 2 #ifdef __cplusplus }; #endif /* __cplusplus */ #endif /* _CYGWIN_SOCKET_H */