📄 socket.h
字号:
* Unfortunately, the opthdrs don't include their own length, which the * cmsghdrs do. What this means is that TLI programmers will not be * able to take something returned using these macros and immediately give * it back to the stack. The size of the struct cmsghdr will have to be * subtracted out. * There doesn't seem to be a way to avoid this, since several applications * look into the cmsg_len field and won't work if it doesn't include the size * of the struct cmsghdr. */struct cmsghdr { int cmsg_level; /* originating protocol */ int cmsg_type; /* protocol-specific type */ u_int cmsg_len; /* data byte count, including hdr *//* followed by u_char cmsg_data[]; */};/* given pointer to struct adatahdr, return pointer to data */#define CMSG_DATA(cmsg) ((u_char *)((cmsg) + 1))/* given pointer to struct adatahdr, return pointer to next adatahdr */#define CMSG_NXTHDR(mhdr, cmsg) \ (((caddr_t)(cmsg) + (cmsg)->cmsg_len + sizeof(struct cmsghdr) > \ (mhdr)->msg_control + (mhdr)->msg_controllen) ? \ (struct cmsghdr *)NULL : \ (struct cmsghdr *)((caddr_t)(cmsg) + OPTLEN((cmsg)->cmsg_len)))#define CMSG_FIRSTHDR(mhdr) ((struct cmsghdr *)(mhdr)->msg_control)/* "Socket"-level control message types: */#define SCM_RIGHTS 0x01 /* access rights (array of int) *//* * This ioctl code uses BSD style ioctls to avoid copyin/out problems. * Ioctls have the command encoded in the lower word, and the size of any in * or out parameters in the upper word. The high 2 bits of the upper word * are used to encode the in/out status of the parameter; for now we restrict * parameters to at most 128 bytes. */#define IOCPARM_MASK 0x7f /* parameters must be < 128 bytes */#define IOC_VOID 0x20000000 /* no parameters */#define IOC_OUT 0x40000000 /* copy out parameters */#define IOC_IN 0x80000000 /* copy in parameters */#define IOC_INOUT (IOC_IN|IOC_OUT)/* the 0x20000000 is so we can distinguish new ioctls from old */#define _IOS(x,y) (IOC_VOID|(x<<8)|y)#define _IOSR(x,y,t) (IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)#define _IOSW(x,y,t) (IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)/* this should be _IOSRW, but stdio got there first */#define _IOSWR(x,y,t) (IOC_INOUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)/* * Socket ioctl commands */#define SIOCSHIWAT _IOSW('S', 1, int) /* set high watermark */#define SIOCGHIWAT _IOSR('S', 2, int) /* get high watermark */#define SIOCSLOWAT _IOSW('S', 3, int) /* set low watermark */#define SIOCGLOWAT _IOSR('S', 4, int) /* get low watermark */#define SIOCATMARK _IOSR('S', 5, int) /* at oob mark? */#define SIOCSPGRP _IOSW('S', 6, int) /* set process group */#define SIOCGPGRP _IOSR('S', 7, int) /* get process group */#define FIONREAD _IOSR('S', 8, int) /* BSD compatibilty */#define FIONBIO _IOSW('S', 9, int) /* BSD compatibilty */#define FIOASYNC _IOSW('S', 10, int) /* BSD compatibilty */#define SIOCPROTO _IOSW('S', 11, struct socknewproto) /* link proto */#define SIOCGETNAME _IOSR('S', 12, struct sockaddr) /* getsockname */#define SIOCGETPEER _IOSR('S', 13, struct sockaddr) /* getpeername */#define IF_UNITSEL _IOSW('S', 14, int) /* set unit number */#define SIOCXPROTO _IOS('S', 15) /* empty proto table */#define SIOCSHRDTYPE _IOSW('S', 16, int) /* set hardware type */#define SIOCADDRT _IOSW('R', 9, struct ortentry) /* add route */#define SIOCDELRT _IOSW('R', 10, struct ortentry) /* delete route */#define SIOCSIFADDR _IOSW('I', 11, struct ifreq) /* set ifnet address */#define SIOCGIFADDR _IOSWR('I', 12, struct ifreq) /* get ifnet address */#define SIOCSIFDSTADDR _IOSW('I', 13, struct ifreq) /* set p-p address */#define SIOCGIFDSTADDR _IOSWR('I', 14, struct ifreq) /* get p-p address */#define SIOCSIFFLAGS _IOSW('I', 15, struct ifreq) /* set ifnet flags */#define SIOCGIFFLAGS _IOSWR('I', 16, struct ifreq) /* get ifnet flags */#define SIOCGIFCONF _IOSWR('I', 17, struct ifconf) /* get ifnet list */#define SIOCSIFMTU _IOSW('I', 21, struct ifreq) /* get if_mtu */#define SIOCGIFMTU _IOSWR('I', 22, struct ifreq) /* set if_mtu */#define SIOCGIFBRDADDR _IOSWR('I', 32, struct ifreq) /* get broadcast addr */#define SIOCSIFBRDADDR _IOSW('I', 33, struct ifreq) /* set broadcast addr */#define SIOCGIFNETMASK _IOSWR('I', 34, struct ifreq) /* get net addr mask */#define SIOCSIFNETMASK _IOSW('I', 35, struct ifreq) /* set net addr mask */#define SIOCGIFMETRIC _IOSWR('I', 36, struct ifreq) /* get IF metric */#define SIOCSIFMETRIC _IOSW('I', 37, struct ifreq) /* set IF metric */#define SIOCSARP _IOSW('I', 38, struct arpreq) /* set arp entry */#define SIOCGARP _IOSWR('I', 39, struct arpreq) /* get arp entry */#define SIOCDARP _IOSW('I', 40, struct arpreq) /* delete arp entry */#define SIOCSIFNAME _IOSW('I', 41, struct ifreq) /* set interface name */#define SIOCGIFONEP _IOSWR('I', 42, struct ifreq) /* get one-packet params */#define SIOCSIFONEP _IOSW('I', 43, struct ifreq) /* set one-packet params */#define SIOCDIFADDR _IOSW('I', 44, struct ifreq) /* delete IF addr */#define SIOCAIFADDR _IOSW('I', 45, struct ifaliasreq) /*add/change IF alias*/#define SIOCADDMULTI _IOSW('I', 49, struct ifreq) /* add m'cast addr */#define SIOCDELMULTI _IOSW('I', 50, struct ifreq) /* del m'cast addr */#define SIOCGIFALIAS _IOSWR('I', 51, struct ifaliasreq) /* get IF alias */#define SIOCSOCKSYS _IOSW('I', 66, struct socksysreq) /* Pseudo socket syscall *//* these use ifr_metric to pass the information */#define SIOCSIFDEBUG _IOSW('I', 67, struct ifreq) /* set if debug level */#define SIOCGIFDEBUG _IOSWR('I', 68, struct ifreq) /* get if debug level */#define SIOCSIFTYPE _IOSW('I', 69, struct ifreq) /* set if MIB type */#define SIOCGIFTYPE _IOSWR('I', 70, struct ifreq) /* get if MIB type */#define SIOCGIFNUM _IOSR('I', 71, int) /* get number of ifs *//* * This returns the number of ifreqs that SIOCGIFCONF would return, including * aliases. This is the preferred way of sizing a buffer big enough to hold * all interfaces. */#define SIOCGIFANUM _IOSR('I', 72, int) /* get number of ifreqs *//* * Interface specific performance tuning */#define SIOCGIFPERF _IOSR('I', 73, struct ifreq) /* get perf info */#define SIOCSIFPERF _IOSR('I', 74, struct ifreq) /* get perf info *//* * This structure is used to encode pseudo system calls */struct socksysreq { /* When porting, make this the widest thing it can be */ int args[7];};/* * This structure is used for adding new protocols to the list supported by * sockets. */struct socknewproto { int family; /* address family (AF_INET, etc.) */ int type; /* protocol type (SOCK_STREAM, etc.) */ int proto; /* per family proto number */ dev_t dev; /* major/minor to use (must be a clone) */ int flags; /* protosw flags */};/* * utility definitions. */#ifdef MIN#undef MIN#endif#define MIN(x,y) ((x) < (y) ? (x) : (y))#ifndef MAX#define MAX(x,y) ((x) > (y) ? (x) : (y))#endif#define MAXHOSTNAMELEN 256#define NBBY 8 /* number of bits in a byte *//* defines for user/kernel interface */#define MAX_MINOR (makedev(1,0) - 1) /* could be non-portable */#define SOCKETSYS 140 /* SCO 3.2v5 */#define SO_ACCEPT 1#define SO_BIND 2#define SO_CONNECT 3#define SO_GETPEERNAME 4#define SO_GETSOCKNAME 5#define SO_GETSOCKOPT 6#define SO_LISTEN 7#define SO_RECV 8#define SO_RECVFROM 9#define SO_SEND 10#define SO_SENDTO 11#define SO_SETSOCKOPT 12#define SO_SHUTDOWN 13#define SO_SOCKET 14#define SO_SELECT 15#define SO_GETIPDOMAIN 16#define SO_SETIPDOMAIN 17#define SO_ADJTIME 18#define SO_SETREUID 19#define SO_SETREGID 20#define SO_GETTIME 21#define SO_SETTIME 22#define SO_GETITIMER 23#define SO_SETITIMER 24#define SO_RECVMSG 25#define SO_SENDMSG 26#define SO_SOCKPAIR 27/* * message flags */#define M_BCAST 0x80000000/* Definitions and structures used for extracting *//* the size and/or the contents of kernel tables *//* Copyin/out values */#define GIARG 0x1#define CONTI 0x2#define GITAB 0x4struct gi_arg { caddr_t gi_where; unsigned gi_size;};#if !defined(_KERNEL) && !defined(INKERNEL) && !defined(_INKERNEL)#include <sys/cdefs.h>__BEGIN_DECLSint accept __P_((int, struct sockaddr *, int *));int bind __P_((int, const struct sockaddr *, int));int connect __P_((int, const struct sockaddr *, int));int getpeername __P_((int, struct sockaddr *, int *));int getsockname __P_((int, struct sockaddr *, int *));int getsockopt __P_((int, int, int, void *, int *));int setsockopt __P_((int, int, int, const void *, int));int listen __P_((int, int));ssize_t recv __P_((int, void *, size_t, int));ssize_t recvfrom __P_((int, void *, size_t, int, struct sockaddr *, int *));int recvmsg __P_((int, struct msghdr *, int));ssize_t send __P_((int, const void *, size_t, int));int sendmsg __P_((int, const struct msghdr *, int));ssize_t sendto __P_((int, const void *, size_t, int, const struct sockaddr *, int));int shutdown __P_((int, int));int socket __P_((int, int, int));int socketpair __P_((int, int, int, int[2]));__END_DECLS#endif /* !INKERNEL */#endif /* __sys_socket_h */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -