324 lines
11 KiB
C
324 lines
11 KiB
C
/* cygwin/socket.h
|
|
|
|
Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2009, 2010, 2012,
|
|
2013, 2014 Red Hat, Inc.
|
|
|
|
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 <stdint.h>
|
|
|
|
/* Not unsigned for backward compatibility. Keep #define for backward
|
|
compatibility. */
|
|
#ifndef socklen_t
|
|
typedef int socklen_t;
|
|
#define socklen_t socklen_t
|
|
#endif
|
|
|
|
typedef uint16_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 <asm/socket.h> /* arch-dependent defines */
|
|
#include <cygwin/sockios.h> /* the SIOCxxx I/O controls */
|
|
#include <sys/uio.h> /* iovec support */
|
|
#include <sys/types.h>
|
|
|
|
struct ucred {
|
|
pid_t pid;
|
|
uid_t uid;
|
|
gid_t gid;
|
|
};
|
|
|
|
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
|
|
{
|
|
socklen_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 /* access rights (array of int) */
|
|
|
|
#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 */
|
|
|
|
/* GNU extension flags. Or them to the type parameter in calls to
|
|
socket(2) to mark socket as nonblocking and/or close-on-exec. */
|
|
#define SOCK_NONBLOCK 0x01000000
|
|
#define SOCK_CLOEXEC 0x02000000
|
|
#ifdef __INSIDE_CYGWIN__
|
|
#define _SOCK_FLAG_MASK 0xff000000 /* Bits left for more extensions */
|
|
#endif
|
|
|
|
/* Supported address families. */
|
|
/*
|
|
* Address families.
|
|
*/
|
|
#define AF_UNSPEC 0 /* unspecified */
|
|
#define AF_UNIX 1 /* local to host (pipes, portals) */
|
|
#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 */
|
|
|
|
/* 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 */
|