Previous | Contents | Index |
The hostent structure, defined in the NETDB.H header file, holds a host name, a list of aliases associated with the network, and the network's number as specified in an internet address from the hosts database.
The hostent structure definition is as follows:
struct hostent { char *h_name; /* official name of host */ char **h_aliases; /* alias list */ int h_addrtype; /* host address type */ int h_length; /* length of address */ char **h_addr_list; /* list of addresses from name server */ }; #define h_addr h_addr_list[0] /* address, for backward compatibility */ |
The hostent structure members are as follows:
The in_addr structure, defined in the IN.H header file, holds an internet address. The address format can be any of the supported internet address notation formats.
The in_addr structure definition is as follows:
struct in_addr { union { struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct { u_short s_w1,s_w2; } S_un_w; u_long S_addr; } S_un; #define s_addr S_un.S_addr /* can be used for most tcp & ip code */ #define s_host S_un.S_un_b.s_b2 /* host on imp */ #define s_net S_un.S_un_b.s_b1 /* network */ #define s_imp S_un.S_un_w.s_w2 /* imp */ #define s_impno S_un.S_un_b.s_b4 /* imp # */ #define s_lh S_un.S_un_b.s_b3 /* logical host */ }; |
The iovec structure holds one scatter-and-gather buffer. Multiple scatter-and-gather buffer descriptors are stored as an array of iovec elements.
The iovec structure definition is defined in the SOCKET.H header file.
The iovec structure definition is as follows:
struct iovec { char *iov_base; int iov_len; } |
The iovec structure members are as follows:
The linger structure, defined in the SOCKET.H header file, specifies the setting or resetting of the socket option for the time interval that the socket lingers for data. The linger structure is supported only by STREAM-type sockets.
The linger structure definition is as follows:
struct linger { int l_onoff; /* option on/off */ int l_linger; /* linger time */ }; |
The linger structure members are as follows:
The msghdr structure specifies the buffer parameter for the recvmsg and sendmsg I/O functions. The structure allows you to specify an array of scatter and gather buffers. The recvmsg function scatters the data to several user receive buffers, and the sendmsg function gathers data from several user transmit buffers before being transmitted.
The SOCKET.H header file defines the following structures for BSD Versions 4.3 and 4.4:
The msghdr structure definition for use with BSD Version 4.4 is as follows:
struct msghdr { void *msg_name; /* protocol address */ int msg_namelen; /* size of address */ struct iovec *msg_iov; /* scatter/gather array */ int msg_iovlen; /* number of elements in msg_iov */ void *msg_control; /* ancillary data; must be aligned for a cmsghdr structure */ int msg_controllen; /* length of ancillary data buffer */ int msg_flags; /* flags on received message */ }; |
The msghdr structure members are as follows:
The omsghdr structure definition for use with BSD Version 4.3 is as follows:
struct omsghdr { char *msg_name; /* protocol address */ int msg_namelen; /* size of address */ struct iovec *msg_iov; /* scatter/gather array */ int msg_iovlen; /* number of elements in msg_iov */ char *msg_accrights; /* access rights sent/received */ int msg_accrightslen; /* length of access rights buffer */ }; |
The omsghdr structure members are as follows:
The netent structure, defined in the NETDB.H header file, holds a network name, a list of aliases associated with the network, and the network's number specified as an internet address from the network database.
The netent structure definition is as follows:
struct netent { char *n_name; /* official name of net */ char **n_aliases; /* alias list */ int n_addrtype; /* net address type */ long n_net; /* net number */ }; |
The netent structure members are as follows:
The sockaddr structure, defined in the SOCKET.H header file, holds a general address family.
The SOCKET.H header file defines the following structures for BSD Versions 4.3 and 4.4:
The sockaddr structure definition for use with BSD Version 4.4 is as follows:
struct sockaddr { u_char sa_len; /* total length */ u_char sa_family; /* address family */ char sa_data[14]; /* up to 14 bytes of direct address */ }; |
The sockaddr structure members are as follows:
The osockaddr structure definition for use with BSD Version 4.3 is as follows:
struct osockaddr { u_short sa_family; /* address family */ char sa_data[14]; /* up to 14 bytes of direct address */ }; |
The osockaddr structure members are as follows:
The sockaddr_in structure, defined in the IN.H header file, specifies an internet address family.
The sockaddr_in structure definition is as follows:
struct sockaddr_in { short sin_family; /* address family */ u_short sin_port; /* port number */ struct in_addr sin_addr; /* internet address */ char sin_zero[8]; /* 8-byte field of all zeroes */ }; |
The sockaddr_in structure members are as follows:
The timeval structure, defined in the SOCKET.H header file, specifies time intervals. The timeval structure definition is as follows:
struct timeval { long tv_sec; long tv_usec; }; |
The timeval structure members are as follows:
You can include header files on a OpenVMS system using any one of the following preprocessor directive statements:
#include types #include <types.h> #include <sys/types.h> |
The #include types form of the #include preprocessor directive is possible on OpenVMS systems because all header files are located in a text library in the SYS$LIBRARY directory. On Compaq Tru64 UNIX systems, you must specify header files (and subdirectories that locate a header file) within angle brackets (< >) or double quotes (" ") .
For example, to include the header file TYPES.H, use the following form of the #include directive:
#include <sys/types.h> |
Calls to various Sockets API functions return information within a static area. The OpenVMS environment allows an asynchronous system trap (AST) routine to interrupt a Sockets API function during its execution. In addition, the ASTs of more privileged modes can interrupt ASTs of less privileged modes. Therefore, be careful when calling a Sockets API function from an AST state while a similar Sockets API function is being called from either a non-AST state or a less-privileged access mode. You can use the SYS$SETAST system service to enable and disable the reception of AST requests.
The Sockets API functions that use a static area are:
Because these Sockets API functions access files to retrieve information, you should not call these functions from either the KERNEL or the EXEC mode when the ASTs are disabled. |
You cannot use standard I/O functions with the Sockets API.
Specifically, the
fdopen()
function does not support sockets.
3.6 Event Flags
Socket functions can use event flags during their operation. To assign
event flags, use the library function LIB$GET_EF. Event flags are
released when the function no longer needs them.
3.7 Error Checking: errno Values
Most Sockets API functions return a value that indicates whether the function was successful or unsuccessful. A return value of zero (0) indicates success, and a value of --1 indicates the function was unsuccessful.
If the function is not successful, it stores an additional value in the external variable errno . The value stored in errno is valid only when the function is not successful. The error codes are defined in the ERRNO.H header file.
All function return codes and error values are of type integer unless otherwise noted.
The errno values can be translated to a message similar to those found on UNIX systems by using the perror() function. The perror() function writes a message on the standard error stream that describes the current setting of the external variable errno . The error message includes a character string containing the name of the function that caused the error followed by a colon (:), a blank space, the system message string, and a newline character.
Table 3-3 lists the possible errno values.
Error | Description |
---|---|
EADDRINUSE | Address already in use. |
Each address can be used only once. | |
EADDRNOTAVAIL | Cannot assign requested address. |
Normally, these values result from an attempt to create a socket with an address not on this machine. | |
EAFNOSUPPORT | Address family not supported by protocol family. |
An address incompatible with the requested protocol was used. | |
EALREADY | Operation already in progress. |
An operation was attempted on a nonblocking object that already had an operation in progress. | |
ECONNABORTED | Software caused connection abort. |
Indicates that the software caused a connection abort because there is no space on the socket's queue and the socket cannot receive further connections. | |
A connection abort occurred internal to your host machine. | |
ECONNREFUSED | Connection refused. |
No connection could be made because the target machine actively refused it. This usually results from trying to connect to a service that is inactive on a foreign host. | |
ECONNRESET | Connection reset by peer. |
A connection was forcibly closed by a peer. This usually results from the peer executing a shutdown() call. | |
EDESTADDRREQ | Destination address required. |
A required address was omitted from an operation on a socket. | |
EHOSTDOWN | Host is down. |
A socket operation failed because the destination host was down. | |
EHOSTUNREACH | No route to host. |
A socket operation to an unreachable host was attempted. | |
EINPROGRESS | Operation now in progress. |
An operation that takes a long time to complete, such as connect() , was attempted on a nonblocking object. | |
EISCONN | Socket is already connected. |
A connect() request was made on a socket that was already connected, or a sendto() or sendmsg() request on a connected socket specified a destination other than the connected party. | |
A path name lookup involved more than eight symbolic links. | |
EMSGSIZE | Message too long. |
A message sent on a socket was larger than the internal message buffer. | |
ENETDOWN | Network is down. |
A socket operation encountered a dead network. | |
ENETRESET | Network dropped connection on reset. |
The host you were connected to failed and rebooted. | |
ENETUNREACH | Network is unreachable. |
A socket operation to an unreachable network was attempted. | |
ENOBUFS | No buffer space available. |
An operation on a socket or pipe was not performed because the system lacked sufficient buffer space. | |
ENOPROTOOPT | Protocol not available. |
A bad option was specified in a getsockopt() or setsockopt() call. | |
ENOTSOCK | Socket operation on a nonsocket. |
ENTOTCONN | Socket is not connected. |
Request to send or receive data was not allowed because the socket is not connected. | |
EOPNOTSUPP | Operation not supported. |
For example, trying to accept a connection on a datagram socket. | |
EPFNOSUPPORT | Protocol family not supported. |
The protocol family was not configured into the system or no implementation for it exists. | |
EPROTONOSUPPORT | Protocol not supported. |
The protocol was not configured into the system or no implementation for it exists. | |
EPROTOTYPE | Protocol wrong type for socket. |
A protocol was specified that does not support the semantics of the socket type requested. For example you cannot use the ARPA Internet UDP protocol with type SOCK_STREAM . | |
ESHUTDOWN | Cannot send after socket shutdown. |
A request to send data was not allowed because the socket had already been shut down with a previous shutdown() call. | |
ESOCKTNOSUPPORT | Socket type not supported. |
Support for the socket type was not configured into the system or no implementation for it exists. | |
ETIMEDOUT | Connection timed out. |
A connect() request failed because the connected party did not respond properly after a period of time. (The timeout period is dependent on the communication protocol.) | |
EVMSERR | OpenVMS error code is nontranslatable. |
Previous | Next | Contents | Index |