Blame sysdeps/unix/sysv/linux/bits/socket.h

Packit 6c4009
/* System-specific socket constants and types.  Linux version.
Packit 6c4009
   Copyright (C) 1991-2018 Free Software Foundation, Inc.
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
Packit 6c4009
   The GNU C Library is free software; you can redistribute it and/or
Packit 6c4009
   modify it under the terms of the GNU Lesser General Public
Packit 6c4009
   License as published by the Free Software Foundation; either
Packit 6c4009
   version 2.1 of the License, or (at your option) any later version.
Packit 6c4009
Packit 6c4009
   The GNU C Library is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 6c4009
   Lesser General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU Lesser General Public
Packit 6c4009
   License along with the GNU C Library; if not, see
Packit 6c4009
   <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
#ifndef __BITS_SOCKET_H
Packit 6c4009
#define __BITS_SOCKET_H
Packit 6c4009
Packit 6c4009
#ifndef _SYS_SOCKET_H
Packit 6c4009
# error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#define __need_size_t
Packit 6c4009
#include <stddef.h>
Packit 6c4009
Packit 6c4009
#include <sys/types.h>
Packit 6c4009
Packit 6c4009
/* Type for length arguments in socket calls.  */
Packit 6c4009
#ifndef __socklen_t_defined
Packit 6c4009
typedef __socklen_t socklen_t;
Packit 6c4009
# define __socklen_t_defined
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
/* Get the architecture-dependent definition of enum __socket_type.  */
Packit 6c4009
#include <bits/socket_type.h>
Packit 6c4009
Packit 6c4009
/* Protocol families.  */
Packit 6c4009
#define PF_UNSPEC	0	/* Unspecified.  */
Packit 6c4009
#define PF_LOCAL	1	/* Local to host (pipes and file-domain).  */
Packit 6c4009
#define PF_UNIX		PF_LOCAL /* POSIX name for PF_LOCAL.  */
Packit 6c4009
#define PF_FILE		PF_LOCAL /* Another non-standard name for PF_LOCAL.  */
Packit 6c4009
#define PF_INET		2	/* IP protocol family.  */
Packit 6c4009
#define PF_AX25		3	/* Amateur Radio AX.25.  */
Packit 6c4009
#define PF_IPX		4	/* Novell Internet Protocol.  */
Packit 6c4009
#define PF_APPLETALK	5	/* Appletalk DDP.  */
Packit 6c4009
#define PF_NETROM	6	/* Amateur radio NetROM.  */
Packit 6c4009
#define PF_BRIDGE	7	/* Multiprotocol bridge.  */
Packit 6c4009
#define PF_ATMPVC	8	/* ATM PVCs.  */
Packit 6c4009
#define PF_X25		9	/* Reserved for X.25 project.  */
Packit 6c4009
#define PF_INET6	10	/* IP version 6.  */
Packit 6c4009
#define PF_ROSE		11	/* Amateur Radio X.25 PLP.  */
Packit 6c4009
#define PF_DECnet	12	/* Reserved for DECnet project.  */
Packit 6c4009
#define PF_NETBEUI	13	/* Reserved for 802.2LLC project.  */
Packit 6c4009
#define PF_SECURITY	14	/* Security callback pseudo AF.  */
Packit 6c4009
#define PF_KEY		15	/* PF_KEY key management API.  */
Packit 6c4009
#define PF_NETLINK	16
Packit 6c4009
#define PF_ROUTE	PF_NETLINK /* Alias to emulate 4.4BSD.  */
Packit 6c4009
#define PF_PACKET	17	/* Packet family.  */
Packit 6c4009
#define PF_ASH		18	/* Ash.  */
Packit 6c4009
#define PF_ECONET	19	/* Acorn Econet.  */
Packit 6c4009
#define PF_ATMSVC	20	/* ATM SVCs.  */
Packit 6c4009
#define PF_RDS		21	/* RDS sockets.  */
Packit 6c4009
#define PF_SNA		22	/* Linux SNA Project */
Packit 6c4009
#define PF_IRDA		23	/* IRDA sockets.  */
Packit 6c4009
#define PF_PPPOX	24	/* PPPoX sockets.  */
Packit 6c4009
#define PF_WANPIPE	25	/* Wanpipe API sockets.  */
Packit 6c4009
#define PF_LLC		26	/* Linux LLC.  */
Packit 6c4009
#define PF_IB		27	/* Native InfiniBand address.  */
Packit 6c4009
#define PF_MPLS		28	/* MPLS.  */
Packit 6c4009
#define PF_CAN		29	/* Controller Area Network.  */
Packit 6c4009
#define PF_TIPC		30	/* TIPC sockets.  */
Packit 6c4009
#define PF_BLUETOOTH	31	/* Bluetooth sockets.  */
Packit 6c4009
#define PF_IUCV		32	/* IUCV sockets.  */
Packit 6c4009
#define PF_RXRPC	33	/* RxRPC sockets.  */
Packit 6c4009
#define PF_ISDN		34	/* mISDN sockets.  */
Packit 6c4009
#define PF_PHONET	35	/* Phonet sockets.  */
Packit 6c4009
#define PF_IEEE802154	36	/* IEEE 802.15.4 sockets.  */
Packit 6c4009
#define PF_CAIF		37	/* CAIF sockets.  */
Packit 6c4009
#define PF_ALG		38	/* Algorithm sockets.  */
Packit 6c4009
#define PF_NFC		39	/* NFC sockets.  */
Packit 6c4009
#define PF_VSOCK	40	/* vSockets.  */
Packit 6c4009
#define PF_KCM		41	/* Kernel Connection Multiplexor.  */
Packit 6c4009
#define PF_QIPCRTR	42	/* Qualcomm IPC Router.  */
Packit 6c4009
#define PF_SMC		43	/* SMC sockets.  */
Packit Service c7fee0
#define PF_XDP		44	/* XDP sockets.  */
Packit Service c7fee0
#define PF_MAX		45	/* For now..  */
Packit 6c4009
Packit 6c4009
/* Address families.  */
Packit 6c4009
#define AF_UNSPEC	PF_UNSPEC
Packit 6c4009
#define AF_LOCAL	PF_LOCAL
Packit 6c4009
#define AF_UNIX		PF_UNIX
Packit 6c4009
#define AF_FILE		PF_FILE
Packit 6c4009
#define AF_INET		PF_INET
Packit 6c4009
#define AF_AX25		PF_AX25
Packit 6c4009
#define AF_IPX		PF_IPX
Packit 6c4009
#define AF_APPLETALK	PF_APPLETALK
Packit 6c4009
#define AF_NETROM	PF_NETROM
Packit 6c4009
#define AF_BRIDGE	PF_BRIDGE
Packit 6c4009
#define AF_ATMPVC	PF_ATMPVC
Packit 6c4009
#define AF_X25		PF_X25
Packit 6c4009
#define AF_INET6	PF_INET6
Packit 6c4009
#define AF_ROSE		PF_ROSE
Packit 6c4009
#define AF_DECnet	PF_DECnet
Packit 6c4009
#define AF_NETBEUI	PF_NETBEUI
Packit 6c4009
#define AF_SECURITY	PF_SECURITY
Packit 6c4009
#define AF_KEY		PF_KEY
Packit 6c4009
#define AF_NETLINK	PF_NETLINK
Packit 6c4009
#define AF_ROUTE	PF_ROUTE
Packit 6c4009
#define AF_PACKET	PF_PACKET
Packit 6c4009
#define AF_ASH		PF_ASH
Packit 6c4009
#define AF_ECONET	PF_ECONET
Packit 6c4009
#define AF_ATMSVC	PF_ATMSVC
Packit 6c4009
#define AF_RDS		PF_RDS
Packit 6c4009
#define AF_SNA		PF_SNA
Packit 6c4009
#define AF_IRDA		PF_IRDA
Packit 6c4009
#define AF_PPPOX	PF_PPPOX
Packit 6c4009
#define AF_WANPIPE	PF_WANPIPE
Packit 6c4009
#define AF_LLC		PF_LLC
Packit 6c4009
#define AF_IB		PF_IB
Packit 6c4009
#define AF_MPLS		PF_MPLS
Packit 6c4009
#define AF_CAN		PF_CAN
Packit 6c4009
#define AF_TIPC		PF_TIPC
Packit 6c4009
#define AF_BLUETOOTH	PF_BLUETOOTH
Packit 6c4009
#define AF_IUCV		PF_IUCV
Packit 6c4009
#define AF_RXRPC	PF_RXRPC
Packit 6c4009
#define AF_ISDN		PF_ISDN
Packit 6c4009
#define AF_PHONET	PF_PHONET
Packit 6c4009
#define AF_IEEE802154	PF_IEEE802154
Packit 6c4009
#define AF_CAIF		PF_CAIF
Packit 6c4009
#define AF_ALG		PF_ALG
Packit 6c4009
#define AF_NFC		PF_NFC
Packit 6c4009
#define AF_VSOCK	PF_VSOCK
Packit 6c4009
#define AF_KCM		PF_KCM
Packit 6c4009
#define AF_QIPCRTR	PF_QIPCRTR
Packit 6c4009
#define AF_SMC		PF_SMC
Packit Service c7fee0
#define AF_XDP		PF_XDP
Packit 6c4009
#define AF_MAX		PF_MAX
Packit 6c4009
Packit 6c4009
/* Socket level values.  Others are defined in the appropriate headers.
Packit 6c4009
Packit 6c4009
   XXX These definitions also should go into the appropriate headers as
Packit 6c4009
   far as they are available.  */
Packit 6c4009
#define SOL_RAW		255
Packit 6c4009
#define SOL_DECNET      261
Packit 6c4009
#define SOL_X25         262
Packit 6c4009
#define SOL_PACKET	263
Packit 6c4009
#define SOL_ATM		264	/* ATM layer (cell level).  */
Packit 6c4009
#define SOL_AAL		265	/* ATM Adaption Layer (packet level).  */
Packit 6c4009
#define SOL_IRDA	266
Packit 6c4009
#define SOL_NETBEUI	267
Packit 6c4009
#define SOL_LLC		268
Packit 6c4009
#define SOL_DCCP	269
Packit 6c4009
#define SOL_NETLINK	270
Packit 6c4009
#define SOL_TIPC	271
Packit 6c4009
#define SOL_RXRPC	272
Packit 6c4009
#define SOL_PPPOL2TP	273
Packit 6c4009
#define SOL_BLUETOOTH	274
Packit 6c4009
#define SOL_PNPIPE	275
Packit 6c4009
#define SOL_RDS		276
Packit 6c4009
#define SOL_IUCV	277
Packit 6c4009
#define SOL_CAIF	278
Packit 6c4009
#define SOL_ALG		279
Packit 6c4009
#define SOL_NFC		280
Packit 6c4009
#define SOL_KCM		281
Packit 6c4009
#define SOL_TLS		282
Packit Service c7fee0
#define SOL_XDP		283
Packit 6c4009
Packit 6c4009
/* Maximum queue length specifiable by listen.  */
Packit 6c4009
#define SOMAXCONN	128
Packit 6c4009
Packit 6c4009
/* Get the definition of the macro to define the common sockaddr members.  */
Packit 6c4009
#include <bits/sockaddr.h>
Packit 6c4009
Packit 6c4009
/* Structure describing a generic socket address.  */
Packit 6c4009
struct sockaddr
Packit 6c4009
  {
Packit 6c4009
    __SOCKADDR_COMMON (sa_);	/* Common data: address family and length.  */
Packit 6c4009
    char sa_data[14];		/* Address data.  */
Packit 6c4009
  };
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Structure large enough to hold any socket address (with the historical
Packit 6c4009
   exception of AF_UNIX).  */
Packit 6c4009
#define __ss_aligntype	unsigned long int
Packit 6c4009
#define _SS_PADSIZE \
Packit 6c4009
  (_SS_SIZE - __SOCKADDR_COMMON_SIZE - sizeof (__ss_aligntype))
Packit 6c4009
Packit 6c4009
struct sockaddr_storage
Packit 6c4009
  {
Packit 6c4009
    __SOCKADDR_COMMON (ss_);	/* Address family, etc.  */
Packit 6c4009
    char __ss_padding[_SS_PADSIZE];
Packit 6c4009
    __ss_aligntype __ss_align;	/* Force desired alignment.  */
Packit 6c4009
  };
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Bits in the FLAGS argument to `send', `recv', et al.  */
Packit 6c4009
enum
Packit 6c4009
  {
Packit 6c4009
    MSG_OOB		= 0x01,	/* Process out-of-band data.  */
Packit 6c4009
#define MSG_OOB		MSG_OOB
Packit 6c4009
    MSG_PEEK		= 0x02,	/* Peek at incoming messages.  */
Packit 6c4009
#define MSG_PEEK	MSG_PEEK
Packit 6c4009
    MSG_DONTROUTE	= 0x04,	/* Don't use local routing.  */
Packit 6c4009
#define MSG_DONTROUTE	MSG_DONTROUTE
Packit 6c4009
#ifdef __USE_GNU
Packit 6c4009
    /* DECnet uses a different name.  */
Packit 6c4009
    MSG_TRYHARD		= MSG_DONTROUTE,
Packit 6c4009
# define MSG_TRYHARD	MSG_DONTROUTE
Packit 6c4009
#endif
Packit 6c4009
    MSG_CTRUNC		= 0x08,	/* Control data lost before delivery.  */
Packit 6c4009
#define MSG_CTRUNC	MSG_CTRUNC
Packit 6c4009
    MSG_PROXY		= 0x10,	/* Supply or ask second address.  */
Packit 6c4009
#define MSG_PROXY	MSG_PROXY
Packit 6c4009
    MSG_TRUNC		= 0x20,
Packit 6c4009
#define MSG_TRUNC	MSG_TRUNC
Packit 6c4009
    MSG_DONTWAIT	= 0x40, /* Nonblocking IO.  */
Packit 6c4009
#define MSG_DONTWAIT	MSG_DONTWAIT
Packit 6c4009
    MSG_EOR		= 0x80, /* End of record.  */
Packit 6c4009
#define MSG_EOR		MSG_EOR
Packit 6c4009
    MSG_WAITALL		= 0x100, /* Wait for a full request.  */
Packit 6c4009
#define MSG_WAITALL	MSG_WAITALL
Packit 6c4009
    MSG_FIN		= 0x200,
Packit 6c4009
#define MSG_FIN		MSG_FIN
Packit 6c4009
    MSG_SYN		= 0x400,
Packit 6c4009
#define MSG_SYN		MSG_SYN
Packit 6c4009
    MSG_CONFIRM		= 0x800, /* Confirm path validity.  */
Packit 6c4009
#define MSG_CONFIRM	MSG_CONFIRM
Packit 6c4009
    MSG_RST		= 0x1000,
Packit 6c4009
#define MSG_RST		MSG_RST
Packit 6c4009
    MSG_ERRQUEUE	= 0x2000, /* Fetch message from error queue.  */
Packit 6c4009
#define MSG_ERRQUEUE	MSG_ERRQUEUE
Packit 6c4009
    MSG_NOSIGNAL	= 0x4000, /* Do not generate SIGPIPE.  */
Packit 6c4009
#define MSG_NOSIGNAL	MSG_NOSIGNAL
Packit 6c4009
    MSG_MORE		= 0x8000,  /* Sender will send more.  */
Packit 6c4009
#define MSG_MORE	MSG_MORE
Packit 6c4009
    MSG_WAITFORONE	= 0x10000, /* Wait for at least one packet to return.*/
Packit 6c4009
#define MSG_WAITFORONE	MSG_WAITFORONE
Packit 6c4009
    MSG_BATCH		= 0x40000, /* sendmmsg: more messages coming.  */
Packit 6c4009
#define MSG_BATCH	MSG_BATCH
Packit 6c4009
    MSG_ZEROCOPY	= 0x4000000, /* Use user data in kernel path.  */
Packit 6c4009
#define MSG_ZEROCOPY	MSG_ZEROCOPY
Packit 6c4009
    MSG_FASTOPEN	= 0x20000000, /* Send data in TCP SYN.  */
Packit 6c4009
#define MSG_FASTOPEN	MSG_FASTOPEN
Packit 6c4009
Packit 6c4009
    MSG_CMSG_CLOEXEC	= 0x40000000	/* Set close_on_exit for file
Packit 6c4009
					   descriptor received through
Packit 6c4009
					   SCM_RIGHTS.  */
Packit 6c4009
#define MSG_CMSG_CLOEXEC MSG_CMSG_CLOEXEC
Packit 6c4009
  };
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Structure describing messages sent by
Packit 6c4009
   `sendmsg' and received by `recvmsg'.  */
Packit 6c4009
struct msghdr
Packit 6c4009
  {
Packit 6c4009
    void *msg_name;		/* Address to send to/receive from.  */
Packit 6c4009
    socklen_t msg_namelen;	/* Length of address data.  */
Packit 6c4009
Packit 6c4009
    struct iovec *msg_iov;	/* Vector of data to send/receive into.  */
Packit 6c4009
    size_t msg_iovlen;		/* Number of elements in the vector.  */
Packit 6c4009
Packit 6c4009
    void *msg_control;		/* Ancillary data (eg BSD filedesc passing). */
Packit 6c4009
    size_t msg_controllen;	/* Ancillary data buffer length.
Packit 6c4009
				   !! The type should be socklen_t but the
Packit 6c4009
				   definition of the kernel is incompatible
Packit 6c4009
				   with this.  */
Packit 6c4009
Packit 6c4009
    int msg_flags;		/* Flags on received message.  */
Packit 6c4009
  };
Packit 6c4009
Packit 6c4009
/* Structure used for storage of ancillary data object information.  */
Packit 6c4009
struct cmsghdr
Packit 6c4009
  {
Packit 6c4009
    size_t cmsg_len;		/* Length of data in cmsg_data plus length
Packit 6c4009
				   of cmsghdr structure.
Packit 6c4009
				   !! The type should be socklen_t but the
Packit 6c4009
				   definition of the kernel is incompatible
Packit 6c4009
				   with this.  */
Packit 6c4009
    int cmsg_level;		/* Originating protocol.  */
Packit 6c4009
    int cmsg_type;		/* Protocol specific type.  */
Packit 6c4009
#if __glibc_c99_flexarr_available
Packit 6c4009
    __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data.  */
Packit 6c4009
#endif
Packit 6c4009
  };
Packit 6c4009
Packit 6c4009
/* Ancillary data object manipulation macros.  */
Packit 6c4009
#if __glibc_c99_flexarr_available
Packit 6c4009
# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
Packit 6c4009
#else
Packit 6c4009
# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
Packit 6c4009
#endif
Packit 6c4009
#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
Packit 6c4009
#define CMSG_FIRSTHDR(mhdr) \
Packit 6c4009
  ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr)		      \
Packit 6c4009
   ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0)
Packit 6c4009
#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \
Packit 6c4009
			 & (size_t) ~(sizeof (size_t) - 1))
Packit 6c4009
#define CMSG_SPACE(len) (CMSG_ALIGN (len) \
Packit 6c4009
			 + CMSG_ALIGN (sizeof (struct cmsghdr)))
Packit 6c4009
#define CMSG_LEN(len)   (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
Packit 6c4009
Packit 6c4009
extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
Packit 6c4009
				      struct cmsghdr *__cmsg) __THROW;
Packit 6c4009
#ifdef __USE_EXTERN_INLINES
Packit 6c4009
# ifndef _EXTERN_INLINE
Packit 6c4009
#  define _EXTERN_INLINE __extern_inline
Packit 6c4009
# endif
Packit 6c4009
_EXTERN_INLINE struct cmsghdr *
Packit 6c4009
__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
Packit 6c4009
{
Packit 6c4009
  if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
Packit 6c4009
    /* The kernel header does this so there may be a reason.  */
Packit 6c4009
    return (struct cmsghdr *) 0;
Packit 6c4009
Packit 6c4009
  __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
Packit 6c4009
			       + CMSG_ALIGN (__cmsg->cmsg_len));
Packit 6c4009
  if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
Packit 6c4009
					+ __mhdr->msg_controllen)
Packit 6c4009
      || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
Packit 6c4009
	  > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
Packit 6c4009
    /* No more entries.  */
Packit 6c4009
    return (struct cmsghdr *) 0;
Packit 6c4009
  return __cmsg;
Packit 6c4009
}
Packit 6c4009
#endif	/* Use `extern inline'.  */
Packit 6c4009
Packit 6c4009
/* Socket level message types.  This must match the definitions in
Packit 6c4009
   <linux/socket.h>.  */
Packit 6c4009
enum
Packit 6c4009
  {
Packit 6c4009
    SCM_RIGHTS = 0x01		/* Transfer file descriptors.  */
Packit 6c4009
#define SCM_RIGHTS SCM_RIGHTS
Packit 6c4009
#ifdef __USE_GNU
Packit 6c4009
    , SCM_CREDENTIALS = 0x02	/* Credentials passing.  */
Packit 6c4009
# define SCM_CREDENTIALS SCM_CREDENTIALS
Packit 6c4009
#endif
Packit 6c4009
  };
Packit 6c4009
Packit 6c4009
#ifdef __USE_GNU
Packit 6c4009
/* User visible structure for SCM_CREDENTIALS message */
Packit 6c4009
struct ucred
Packit 6c4009
{
Packit 6c4009
  pid_t pid;			/* PID of sending process.  */
Packit 6c4009
  uid_t uid;			/* UID of sending process.  */
Packit 6c4009
  gid_t gid;			/* GID of sending process.  */
Packit 6c4009
};
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
/* Ugly workaround for unclean kernel headers.  */
Packit 6c4009
#ifndef __USE_MISC
Packit 6c4009
# ifndef FIOGETOWN
Packit 6c4009
#  define __SYS_SOCKET_H_undef_FIOGETOWN
Packit 6c4009
# endif
Packit 6c4009
# ifndef FIOSETOWN
Packit 6c4009
#  define __SYS_SOCKET_H_undef_FIOSETOWN
Packit 6c4009
# endif
Packit 6c4009
# ifndef SIOCATMARK
Packit 6c4009
#  define __SYS_SOCKET_H_undef_SIOCATMARK
Packit 6c4009
# endif
Packit 6c4009
# ifndef SIOCGPGRP
Packit 6c4009
#  define __SYS_SOCKET_H_undef_SIOCGPGRP
Packit 6c4009
# endif
Packit 6c4009
# ifndef SIOCGSTAMP
Packit 6c4009
#  define __SYS_SOCKET_H_undef_SIOCGSTAMP
Packit 6c4009
# endif
Packit 6c4009
# ifndef SIOCGSTAMPNS
Packit 6c4009
#  define __SYS_SOCKET_H_undef_SIOCGSTAMPNS
Packit 6c4009
# endif
Packit 6c4009
# ifndef SIOCSPGRP
Packit 6c4009
#  define __SYS_SOCKET_H_undef_SIOCSPGRP
Packit 6c4009
# endif
Packit 6c4009
#endif
Packit 6c4009
#ifndef IOCSIZE_MASK
Packit 6c4009
# define __SYS_SOCKET_H_undef_IOCSIZE_MASK
Packit 6c4009
#endif
Packit 6c4009
#ifndef IOCSIZE_SHIFT
Packit 6c4009
# define __SYS_SOCKET_H_undef_IOCSIZE_SHIFT
Packit 6c4009
#endif
Packit 6c4009
#ifndef IOC_IN
Packit 6c4009
# define __SYS_SOCKET_H_undef_IOC_IN
Packit 6c4009
#endif
Packit 6c4009
#ifndef IOC_INOUT
Packit 6c4009
# define __SYS_SOCKET_H_undef_IOC_INOUT
Packit 6c4009
#endif
Packit 6c4009
#ifndef IOC_OUT
Packit 6c4009
# define __SYS_SOCKET_H_undef_IOC_OUT
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
/* Get socket manipulation related informations from kernel headers.  */
Packit 6c4009
#include <asm/socket.h>
Packit 6c4009
Packit 6c4009
#ifndef __USE_MISC
Packit 6c4009
# ifdef __SYS_SOCKET_H_undef_FIOGETOWN
Packit 6c4009
#  undef __SYS_SOCKET_H_undef_FIOGETOWN
Packit 6c4009
#  undef FIOGETOWN
Packit 6c4009
# endif
Packit 6c4009
# ifdef __SYS_SOCKET_H_undef_FIOSETOWN
Packit 6c4009
#  undef __SYS_SOCKET_H_undef_FIOSETOWN
Packit 6c4009
#  undef FIOSETOWN
Packit 6c4009
# endif
Packit 6c4009
# ifdef __SYS_SOCKET_H_undef_SIOCATMARK
Packit 6c4009
#  undef __SYS_SOCKET_H_undef_SIOCATMARK
Packit 6c4009
#  undef SIOCATMARK
Packit 6c4009
# endif
Packit 6c4009
# ifdef __SYS_SOCKET_H_undef_SIOCGPGRP
Packit 6c4009
#  undef __SYS_SOCKET_H_undef_SIOCGPGRP
Packit 6c4009
#  undef SIOCGPGRP
Packit 6c4009
# endif
Packit 6c4009
# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMP
Packit 6c4009
#  undef __SYS_SOCKET_H_undef_SIOCGSTAMP
Packit 6c4009
#  undef SIOCGSTAMP
Packit 6c4009
# endif
Packit 6c4009
# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMPNS
Packit 6c4009
#  undef __SYS_SOCKET_H_undef_SIOCGSTAMPNS
Packit 6c4009
#  undef SIOCGSTAMPNS
Packit 6c4009
# endif
Packit 6c4009
# ifdef __SYS_SOCKET_H_undef_SIOCSPGRP
Packit 6c4009
#  undef __SYS_SOCKET_H_undef_SIOCSPGRP
Packit 6c4009
#  undef SIOCSPGRP
Packit 6c4009
# endif
Packit 6c4009
#endif
Packit 6c4009
#ifdef __SYS_SOCKET_H_undef_IOCSIZE_MASK
Packit 6c4009
# undef __SYS_SOCKET_H_undef_IOCSIZE_MASK
Packit 6c4009
# undef IOCSIZE_MASK
Packit 6c4009
#endif
Packit 6c4009
#ifdef __SYS_SOCKET_H_undef_IOCSIZE_SHIFT
Packit 6c4009
# undef __SYS_SOCKET_H_undef_IOCSIZE_SHIFT
Packit 6c4009
# undef IOCSIZE_SHIFT
Packit 6c4009
#endif
Packit 6c4009
#ifdef __SYS_SOCKET_H_undef_IOC_IN
Packit 6c4009
# undef __SYS_SOCKET_H_undef_IOC_IN
Packit 6c4009
# undef IOC_IN
Packit 6c4009
#endif
Packit 6c4009
#ifdef __SYS_SOCKET_H_undef_IOC_INOUT
Packit 6c4009
# undef __SYS_SOCKET_H_undef_IOC_INOUT
Packit 6c4009
# undef IOC_INOUT
Packit 6c4009
#endif
Packit 6c4009
#ifdef __SYS_SOCKET_H_undef_IOC_OUT
Packit 6c4009
# undef __SYS_SOCKET_H_undef_IOC_OUT
Packit 6c4009
# undef IOC_OUT
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
/* Structure used to manipulate the SO_LINGER option.  */
Packit 6c4009
struct linger
Packit 6c4009
  {
Packit 6c4009
    int l_onoff;		/* Nonzero to linger on close.  */
Packit 6c4009
    int l_linger;		/* Time to linger.  */
Packit 6c4009
  };
Packit 6c4009
Packit 6c4009
#endif	/* bits/socket.h */