/* Ported to GNU C openVMS/Alpha by Klaus Kämpf, kkaempf@progis.de */ /* */ #ifndef _SYS_SOCKET_H #define _SYS_SOCKET_H 1 /* * Copyright (c) 1982 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. * * socket.h 6.6 (Berkeley) 6/8/85 */ #ifndef _SYS_TYPES_H #include #endif #ifndef _SYS_TIME_H #include #endif /* * Definitions related to sockets: types, address families, options. */ #define __FD_SET 1 #ifndef FD_SETSIZE #define FD_SETSIZE 32 #endif typedef long fd_mask; #define NBBY 8 /* bits per byte */ #define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask */ #define FD_SET(fd, pmask) ((pmask)->fds_bits[(fd)/NFDBITS] |= (1 << ((fd) % NFDBITS))) #define FD_CLR(fd, pmask) ((pmask)->fds_bits[(fd)/NFDBITS] &= ~(1 << ((fd) % NFDBITS))) #define FD_ISSET(fd, pmask) ((pmask)->fds_bits[(fd)/NFDBITS] & (1 << ((fd) % NFDBITS))) #define FD_ZERO(pmask) bzero((char *)(pmask), sizeof (*(pmask))) #define __howmany(__fdsize, __bits) (((__fdsize)+((__bits)-1))/(__bits)) typedef struct fd_set { fd_mask fds_bits[__howmany(FD_SETSIZE, NFDBITS)]; } fd_set; /* * Types */ #define SOCK_STREAM 1 /* stream socket */ #define SOCK_DGRAM 2 /* datagram socket */ #define SOCK_RAW 3 /* raw-protocol interface */ #define SOCK_RDM 4 /* reliably-delivered message */ #define SOCK_SEQPACKET 5 /* sequenced packet stream */ /* * Option flags per-socket. */ #define SO_DEBUG 0x01 /* turn on debugging info recording */ #define SO_ACCEPTCONN 0x02 /* socket has had listen() */ #define SO_REUSEADDR 0x04 /* allow local address reuse */ #define SO_KEEPALIVE 0x08 /* keep connections alive */ #define SO_DONTROUTE 0x10 /* just use interface addresses */ #define SO_BROADCAST 0x20 /* permit sending of broadcast msgs */ #define SO_USELOOPBACK 0x40 /* bypass hardware when possible */ #define SO_LINGER 0x80 /* linger on close if data present */ #define SO_OOBINLINE 0x100 /* leave received OOB data in line */ /* * Additional options, not kept in so_options. */ #define SO_SNDBUF 0x1001 /* send buffer size */ #define SO_RCVBUF 0x1002 /* receive buffer size */ #define SO_SNDLOWAT 0x1003 /* send low-water mark */ #define SO_RCVLOWAT 0x1004 /* receive low-water mark */ #define SO_SNDTIMEO 0x1005 /* send timeout */ #define SO_RCVTIMEO 0x1006 /* receive timeout */ #define SO_ERROR 0x1007 /* get error status and clear */ #define SO_TYPE 0x1008 /* get socket type */ /* * Structure used for manipulating linger option. */ struct linger { int l_onoff; /* option on/off */ int l_linger; /* linger time */ }; /* * Level number for (get/set)sockopt() to apply to socket itself. */ #define SOL_SOCKET 0xffff /* options for socket level */ /* * Address families. */ #define AF_UNSPEC 0 /* unspecified */ #define AF_UNIX 1 /* local to host (pipes, portals) */ #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_NBS 7 /* nbs protocols */ #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 /* Apple talk */ #define AF_BSC 17 /* BISYNC 2780/3780 */ #define AF_DSS 18 /* Distributed system services */ #define AF_MAX 19 /* * Structure used by kernel to store most * addresses. */ struct sockaddr { u_short sa_family; /* address family */ char sa_data[14]; /* up to 14 bytes of direct address */ }; /* * Structure used by kernel to pass protocol * information in raw sockets. */ struct sockproto { u_short sp_family; /* address family */ u_short sp_protocol; /* protocol */ }; /* * Protocol families, same as address families for now. */ #define PF_UNSPEC AF_UNSPEC #define PF_UNIX AF_UNIX #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_NBS AF_NBS #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_BSC AF_BSC #define PF_DSS AF_DSS #define PF_MAX AF_MAX /* * Maximum queue length specifiable by listen. */ #define SOMAXCONN 5 /* * I/O buffer element. */ struct iovec { caddr_t iov_base; int iov_len; }; /* * Message header for recvmsg and sendmsg calls. */ struct msghdr { caddr_t msg_name; /* optional address */ int msg_namelen; /* size of address */ struct iovec *msg_iov; /* scatter/gather array */ int msg_iovlen; /* # elements in msg_iov */ caddr_t msg_accrights; /* access rights sent/received */ int msg_accrightslen; }; #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_MAXIOVLEN 16 int socket (int af, int mess_type, int prot_type) __asm ("DECC$SOCKET"); int accept (int sd, struct sockaddr *S_addr, int *addrlen) __asm ("DECC$ACCEPT"); int bind (int sd, struct sockaddr *s_name, int namelen) __asm ("DECC$BIND"); int listen (int sd, int backlog) __asm ("DECC$LISTEN"); int connect (int sd, struct sockaddr *name, int namelen) __asm ("DECC$CONNECT"); int send (int sd, char * msg, int length, int flags) __asm("DECC$SEND"); int recvmsg (int sd, struct msghdr *msg, int flags) __asm ("DECC$RECVMSG"); int sendmsg (int sd, struct msghdr * msg, int flags) __asm ("DECC$SENDMSG"); int sendto (int sd, char * msg, int length, int flags, struct sockaddr *to, int tolen) __asm ("DECC$SENDTO"); int recv (int sd, char * buf, int length, int flags) __asm ("DECC$RECV"); int recvfrom (int sd, char * buf, int length, int flags, struct sockaddr *from, int *fromlen) __asm ("DECC$RECVFROM"); int shutdown (int sd, int mode) __asm ("DECC$SHUTDOWN"); int select (int nfds, int *readfds, int *writefds, int *exceptfds, struct timeval *timeout) __asm("DECC$SELECT"); int gethostname (char *name, int namelen) __asm ("DECC$GETHOSTNAME"); int gethostaddr (char *addr) __asm ("DECC$GETHOSTADDR"); int getpeername (int sd, struct sockaddr *name, int *namelen) __asm ("DECC$GETPEERNAME"); int getsockname (int sd, struct sockaddr *name, int *namelen) __asm ("DECC$GETSOCKNAME"); int getsockopt (int sd, int level, int optname, char *optval, int *optlen) __asm ("DECC$GETSOCKOPT"); int setsockopt (int sd, int level, int optname, char *optval, int optlen) __asm ("DECC$SETSOCKOPT"); int vaxc$get_sdc (int descrip_no); #endif /* _SYS_SOCKET_H */