OpenSS7 SS7 for the Common Man |
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |
||||||||||||||||||||||||||
Home | Overview | Status | News | Documentation | Resources | About | |||||||||||||||||||||
File /code/strss7/lib/libsocket/socket.h#ifndef _SYS_SOCKET_H #define _SYS_SOCKET_H #include <sys/uio.h> #ident "@(#) $Name: $($Revision: 0.8 $) Copyright (c) 1997-2002 OpenSS7 Corporation." typedef size_t socklen_t; typedef unsigned int sa_family_t; struct sockaddr { sa_family_t sa_family; /* address family */ char sa_data[0]; /* socket address (variable-length data) */ }; /* * Desired design of maximum size and alignment */ #define _SS_MAXSIZE 128 /* Implementation specific max size */ #define _SS_ALIGNSIZE (sizeof (int64_t)) /* Implementation specific desired alignment */ /* * Definitions used for sockaddr_storage structure paddings design. */ #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; /* address family */ /* Following fields are implementation specific */ char _ss_pad1[_SS_PAD1SIZE]; /* 6 byte pad, this is to make implementation */ /* specific pad up to alignment field that */ /* follows explicit in the data structure */ int64_t _ss_align; /* field to force desired structure */ /* storage alignment */ char _ss_pad2[_SS_PAD2SIZE]; /* 112 byte pad to achieve desired size, */ /* _SS_MAXSIZE value minus size of ss_family */ /* __ss_pad1, __ss_align fields is 112 */ }; struct msghdr { void *msg_name /* optional address */ socklen_t msg_namelen /* size of address */ struct iovec *msg_iov /* scatter/gather array */ int msg_iovlen /* members in msg_iov */ void *msg_control /* ancillary data, see below */ socklen_t msg_controllen /* ancillary data buffer len */ int msg_flags /* flags on received message */ /* impelemntation specific elements */ }; The <sys/socket.h> header defines the cmsghdr structure that includes at least the following members: struct cmsghdr { socklen_t cmsg_len /* data byte count, including the cmsghdr */ int cmsg_level /* originating protocol */ int cmsg_type /* protocol-specific type */ }; #define SOL_SOCKET #define SCM_RIGHTS 0x01 /* rw: access rights (array of int) */ #define SCM_CREDENTIALS 0x02 /* rw: struct ucred */ #define SCM_CONNECT 0x03 /* rw: struct scm_connect */ /* * CMSG_DATA(msg) * If the argument is a pointer to a cmsghdr structure, this macro * returns an unsigned character pointer to the data array associated * with the cmsghdr structure. * * CMSG_NXTHDR(mhdr, cmsg) * If the first argument is a pointer to a msghdr structure and the * second argument is a pointer to a cmsghdr structure in the ancillary * data, pointed to by the msg_control field of that msghdr structure, * this macro returns a pointer to the next cmsghdr structure, or a null * pointer if this structure is the last cmsghdr in the ancillary data. * * CMSG_FIRSTHDR(msg) * If the argument is a pointer to a msghdr structure, this macro returns * a pointer to the first cmsghdr structure in the ancillary data * associated with this msghdr structure, or a null pointer if there is * no ancillary data associated with the msghdr structure. */ #define __CMSG_NXTHDR(ctl, len, cmsg) __cmsg_nxthdr((ctl),(len),(cmsg)) #define CMSG_NXTHDR(mhdr, cmsg) cmsg_nxthdr((mhdr), (cmsg)) #define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) ) #define CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr)))) #define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len)) #define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) #define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ? \ (struct cmsghdr *)(ctl) : \ (struct cmsghdr *)NULL) #define CMSG_FIRSTHDR(msg) __CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen) struct linger { int l_onoff /* indicates whether linger option is enabled */ int l_linger /* linger time, in seconds */ }; #define SOCK_DGRAM 1 /* Datagram socket */ #define SOCK_STREAM 2 /* Byte-stream socket */ #define SOCK_SEQPACKET 3 /* Sequenced-packet socket */ #define SOCK_RDM 4 /* reliably-delivered message */ #define SOCK_RAW 5 /* raw socket */ #define SOL_SOCKET 1 #define SO_ACCEPTCONN /* Socket is accepting connections. */ #define SO_BROADCAST 6 /* Transmission of broadcast messages is supported. */ #define SO_DEBUG 1 /* Debugging information is being recorded. */ #define SO_DONTROUTE 5 /* bypass normal routing */ #define SO_ERROR 4 /* Socket error status. */ #define SO_KEEPALIVE 9 /* Connections are kept alive with periodic messages. */ #define SO_LINGER 13 /* Socket lingers on close. */ #define SO_OOBINLINE 10 /* Out-of-band data is transmitted in line. */ #define SO_RCVBUF 8 /* Receive buffer size. */ #define SO_RCVLOWAT 18 /* receive "low water mark" */ #define SO_RCVTIMEO 20 /* receive timeout */ #define SO_REUSEADDR 2 /* Reuse of local addresses is supported. */ #define SO_SNDBUF 7 /* Send buffer size. */ #define SO_SNDLOWAT 19 /* send "low water mark" */ #define SO_SNDTIMEO 21 /* send timeout */ #define SO_TYPE 3 /* Socket type. */ #define SO_NO_CHECK 11 #define SO_PRIORITY 12 #define SO_BSDCOMPAT 14 #define SO_PASSCRED 16 #define SO_PEERCRED 17 #define MSG_CTRUNC 1 /* Control data truncated. */ #define MSG_DONTROUTE 2 /* Send without using routing tables. */ #define MSG_EOR 3 /* Terminates a record (if supported by the protocol). */ #define MSG_OOB 4 /* Out-of-band data. */ #define MSG_PEEK 5 /* Leave received data in queue. */ #define MSG_TRUNC 6 /* Normal data truncated. */ #define MSG_WAITALL 7 /* Wait for complete message. */ #define AF_UNIX 1 /* UNIX domain sockets */ #define AF_UNSPEC 2 /* Unspecified */ #define AF_INET 3 /* Internet domain sockets for use with IPv4 addresses */ #define AF_INET6 4 /* Internet domain sockets for use with IPv6 addresses */ #define SHUT_RD 1 /* Disables further receive operations. */ #define SHUT_WR 2 /* Disables further send operations. */ #define SHUT_RDWR 3 /* Disables further send and receive operations. */ int accept (int socket, struct sockaddr *address, socklen_t *address_len); int bind (int socket, const struct sockaddr *address, socklen_t address_len); int connect (int socket, const struct sockaddr *address, socklen_t address_len); int getpeername (int socket, struct sockaddr *address, socklen_t *address_len); int getsockname (int socket, struct sockaddr *address, socklen_t *address_len); int getsockopt (int socket, int level, int option_name, void *option_value, socklen_t *option_len); int listen (int socket, int backlog); ssize_t recv (int socket, void *buffer, size_t length, int flags); ssize_t recvfrom (int socket, void *buffer, size_t length, int flags, struct sockaddr *address, socklen_t *address_len); ssize_t recvmsg (int socket, struct msghdr *message, int flags); ssize_t send (int socket, const void *message, size_t length, int flags); ssize_t sendmsg (int socket, const struct msghdr *message, int flags); ssize_t sendto (int socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len); int setsockopt (int socket, int level, int option_name, const void *option_value, socklen_t option_len); int shutdown (int socket, int how); int socket (int domain, int type, int protocol); int socketpair (int domain, int type, int protocol, int socket_vector[2]); #endif /* _SYS_SOCKET_H */
|
|||||||||||||||||||||||||||
OpenSS7 SS7 for the Common Man |
Home | Overview | Status | News | Documentation | Resources | About | ||||||||||||||||||||
© Copyright 1997-2004,OpenSS7 Corporation, All Rights Reserved. |