minix/include/sys/socket.h
2010-08-30 13:41:22 +00:00

172 lines
4.8 KiB
C

/*
sys/socket.h
*/
#ifndef SYS_SOCKET_H
#define SYS_SOCKET_H
/* Can we include <stdint.h> here or do we need an additional header that is
* safe to include?
*/
#include <stdint.h>
#include <sys/ucred.h>
/* Open Group Base Specifications Issue 6 (not complete) */
#include <net/gen/socket.h>
#define SOCK_STREAM 1
#define SOCK_DGRAM 2
#define SOCK_RAW 3
#define SOCK_RDM 4
#define SOCK_SEQPACKET 5
#define SOL_SOCKET 0xFFFF
#define SO_DEBUG 0x0001
#define SO_REUSEADDR 0x0004
#define SO_KEEPALIVE 0x0008
#define SO_TYPE 0x0010 /* get socket type, SOCK_STREAM or SOCK_DGRAM */
#define SO_PASSCRED 0x0012
#define SO_PEERCRED 0x0014
#define SO_SNDBUF 0x1001 /* send buffer size */
#define SO_RCVBUF 0x1002 /* receive buffer size */
#define SO_ERROR 0x1007 /* get and clear error status */
/* The how argument to shutdown */
#define SHUT_RD 0 /* No further reads */
#define SHUT_WR 1 /* No further writes */
#define SHUT_RDWR 2 /* No further reads and writes */
#ifndef _SA_FAMILY_T
#define _SA_FAMILY_T
typedef uint8_t sa_family_t;
#endif /* _SA_FAMILY_T */
#ifndef _SOCKLEN_T
#define _SOCKLEN_T
typedef int32_t socklen_t;
#endif /* _SOCKLEN_T */
struct sockaddr
{
sa_family_t sa_family;
char sa_data[8]; /* Big enough for sockaddr_in */
};
struct msghdr
{
void *msg_name;
socklen_t msg_namelen;
struct iovec *msg_iov;
size_t msg_iovlen;
void *msg_control;
socklen_t msg_controllen;
int msg_flags;
};
struct cmsghdr
{
socklen_t cmsg_len;
int cmsg_level;
int cmsg_type;
};
#define CMSG_FIRSTHDR(mhdr) \
( (mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
(struct cmsghdr *)(mhdr)->msg_control : \
(struct cmsghdr *)NULL )
#define CMSG_ALIGN(len) \
( (len % sizeof(long) == 0) ? \
len : \
len + sizeof(long) - (len % sizeof(long)) )
#define CMSG_NXTHDR(mhdr, cmsg) \
( ((cmsg) == NULL) ? CMSG_FIRSTHDR(mhdr) : \
(((unsigned char *)(cmsg) + CMSG_ALIGN((cmsg)->cmsg_len) \
+ CMSG_ALIGN(sizeof(struct cmsghdr)) > \
(unsigned char *)((mhdr)->msg_control) + \
(mhdr)->msg_controllen) ? \
(struct cmsghdr *)NULL : \
(struct cmsghdr *)((unsigned char *)(cmsg) + \
CMSG_ALIGN((cmsg)->cmsg_len))) )
#define CMSG_DATA(cmsg) \
( (unsigned char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr)) )
#define CMSG_SPACE(len) \
( CMSG_ALIGN(len) + CMSG_ALIGN(sizeof(struct cmsghdr)) )
#define CMSG_LEN(len) \
( len + CMSG_ALIGN(sizeof(struct cmsghdr)) )
#define SCM_RIGHTS 0x01
#define SCM_CREDENTIALS 0x02
#define SCM_SECURITY 0x04
_PROTOTYPE( int accept, (int _socket,
struct sockaddr *_RESTRICT _address,
socklen_t *_RESTRICT _address_len) );
_PROTOTYPE( int bind, (int _socket, const struct sockaddr *_address,
socklen_t _address_len) );
_PROTOTYPE( int connect, (int _socket, const struct sockaddr *_address,
socklen_t _address_len) );
_PROTOTYPE( int getpeername, (int _socket,
struct sockaddr *_RESTRICT _address,
socklen_t *_RESTRICT _address_len) );
_PROTOTYPE( int getpeereid, (int _socket, uid_t *_euid, gid_t *_egid) );
_PROTOTYPE( int getsockname, (int _socket,
struct sockaddr *_RESTRICT _address,
socklen_t *_RESTRICT _address_len) );
_PROTOTYPE( int setsockopt,(int _socket, int _level, int _option_name,
const void *_option_value, socklen_t _option_len) );
_PROTOTYPE( int getsockopt, (int _socket, int _level, int _option_name,
void *_RESTRICT _option_value, socklen_t *_RESTRICT _option_len));
_PROTOTYPE( int listen, (int _socket, int _backlog) );
_PROTOTYPE( ssize_t recv, (int _socket, void *_buffer, size_t _length,
int _flags) );
_PROTOTYPE( ssize_t recvfrom, (int _socket, void *_RESTRICT _buffer,
size_t _length, int _flags, struct sockaddr *_RESTRICT _address,
socklen_t *_RESTRICT _address_len) );
_PROTOTYPE( ssize_t recvmsg, (int _socket, struct msghdr *_msg,
int _flags) );
_PROTOTYPE( ssize_t send, (int _socket, const void *_buffer,
size_t _length, int _flags) );
_PROTOTYPE( ssize_t sendmsg, (int _socket, const struct msghdr *_msg,
int _flags) );
_PROTOTYPE( ssize_t sendto, (int _socket, const void *_message,
size_t _length, int _flags, const struct sockaddr *_dest_addr,
socklen_t _dest_len) );
_PROTOTYPE( int shutdown, (int _socket, int _how) );
_PROTOTYPE( int socket, (int _domain, int _type, int _protocol) );
_PROTOTYPE( int socketpair, (int _domain, int _type, int _protocol,
int _sv[2]) );
/* The following constants are often used in applications, but are not defined
* by POSIX.
*/
#define PF_INET AF_INET
#define PF_INET6 AF_INET6
#define PF_UNIX AF_UNIX
#define PF_LOCAL PF_UNIX
#define PF_FILE PF_UNIX
#define PF_UNSPEC AF_UNSPEC
/* based on http://tools.ietf.org/html/rfc2553 */
struct sockaddr_storage
{
sa_family_t ss_family;
char __ss_pad1[6];
#ifdef __LONG_LONG_SUPPORTED
int64_t __ss_align;
#else
int32_t __ss_align[2];
#endif
char __ss_pad2[112];
};
#endif /* SYS_SOCKET_H */