CONTENTS Title Page Copyright Page Preface 1 Interprocess Communications Concepts 1.1 Client-Server Model 1.2 Ports 1.2.1 Privileged Port Numbers 1.2.2 Binding Ports 1.2.3 Assigning Ports 1.3 Sockets and Device-Sockets 1.3.1 Communication Domains 1.3.2 Protocol Types 1.3.3 Internet Protocols 1.4 Socket Communications 1.4.1 Connection-Oriented Sockets 1.4.2 Connectionless Sockets 1.5 Deleting Sockets 2 Writing Internet Applications 2.1 Overview 2.1.1 Network Byte Order 2.2 Creating a Device-Socket 2.2.1 Creating an Internet Pseudodevice 2.2.2 Creating a Local Socket 2.3 Binding a Socket 2.3.1 Using the Berkeley Internet Name Domain Resolver 2.4 Setting Up a Socket to Listen for Requests 2.5 Sending a Connection Request (Client) 2.6 Sending a Communication Request Using UDP/IP 2.7 Accepting a Connection Request (Server) 2.8 Obtaining Device-Socket Information 2.9 Transferring Data 2.9.1 Reading Data 2.9.1.1 Reading Out-of-Band Data (TCP/IP Only) 2.9.1.2 Peeking at Queued Messages 2.9.2 Writing Data 2.9.2.1 Writing Out-of-Band Data (TCP/IP) 2.9.2.2 Writing Data and Broadcast Messages (UDP/IP) 2.10 Deleting a Socket 2.11 Deleting an Internet Pseudodevice 2.12 Canceling I/O Operations 3 Using $QIO System Services 3.1 Overview 3.2 Device- and Function-Independent $QIO Arguments 3.3 Function-Dependent $QIO Arguments 3.3.1 Symbol Definition Macros 3.3.2 UCX Item Lists and UCX Descriptors 3.3.3 Specifying an Input Parameter List For Data 3.3.4 Specifying an Output List For Data 3.3.5 Specifying the Socket Name 3.3.6 Specifying the Socket Options, Protocol Options, and I/O Control (IOCTL) Parameters 4 VMS System Services $ASSIGN $CANCEL $DASSGN $GETDVI $QIO Internet I/O Function Codes IO$_ACCESS IO$_ACPCONTROL IO$_DEACCESS IO$_READVBLK IO$_SENSEMODE/CHARACTERISTICS IO$_SETMODE/CHARACTERISTICS IO$_WRITEVBLK A DEC TCP/IP Programming For The Auxiliary Server B UDP/IP Programming Examples For The Auxiliary Server C DEC C Socket Communications D Error Codes E DEC C Socket Routine Reference E.1 Porting Considerations E.1.1 Calling an IPC Routine from an AST State E.1.2 Calling from KERNEL or EXEC Modes E.1.3 Standard I/O E.1.4 Event Flags E.1.5 Suppressing DEC C Compilation Warnings E.1.6 Header Files E.2 Linking an Internet Application Program E.3 DEC C Structures E.3.1 hostent Structure E.3.2 in_addr Structure E.3.3 iovec Structure E.3.4 linger Structure E.3.5 msghdr Structure E.3.6 netent Structure E.3.7 sockaddr Structure E.3.8 sockaddr_in Structure E.3.9 timeval Structure E.4 Internet Protocols E.4.1 TCP Sockets E.4.2 UDP Sockets E.5 errno Values E.6 Basic Communication Routines accept bind close connect listen read recv recvfrom recvmsg select send sendmsg sendto shutdown socket write E.7 Auxiliary Communication Routines getpeername getsockname getsockopt setsockopt E.8 Communication Support Routines gethostbyaddr gethostbyname gethostname getnetbyaddr getnetbyname getnetent getprotobyname getprotobynumber getprotoent getservbyname getservbyport htonl htons inet_addr inet_lnaof inet_makeaddr inet_netof inet_network inet_ntoa ntohl ntohs vaxc$get_sdc EXAMPLES 3-1 Specifying IOCTL Parameters 4-1 $ASSIGN Service MACRO-32 Programming Example 4-2 $ASSIGN System Service C Programming Example 4-3 $CANCEL System Service MACRO-32 Programming Example 4-4 $CANCEL System Service C Programming Example 4-5 $DASSGN System Service MACRO-32 Programming Example 4-6 $DASSGN System Service C Programming Example 4-7 IO$_ACPCONTROL MACRO-32 Programming Example 4-8 IO$_ACPCONTROL System Service C Programming Example 4-10 IO$_READVBLK Function MACRO-32 Programming Example 4-10 IO$_READVBLK Function MACRO-32 Programming Example 4-11 IO$_READVBLK Function C Programming Example 4-12 IO$_READVBLK Function C Programming Example 4-13 IO$_SETMODE Function MACRO-32 Programming Example 4-14 IO$_SETMODE Function C Programming Example 4-15 IO$_WRITEVBLK Function MACRO-32 Programming Example 4-16 IO$_WRITEVBLK Function (Vectored) C Programming Example 4-17 IO$_WRITEVBLK Function C Programming Example A-1 Server TCP/IP MACRO-32 Programming Example A-2 Server TCP/IP C Programming Example A-3 Client TCP/IP MACRO-32 Programming Example A-4 Client TCP/IP C Programming Example B-1 Read UDP/IP MACRO-32 Example B-2 Read UDP/IP C Programming Example B-3 Write UDP/IP MACRO-32 Programming Example B-4 Write UDP/IP C Programming Example C-1 TCP/IP Server C-2 TCP/IP Server with Auxiliary Server C-3 TCP/IP Client C-4 UDP/IP Server C-5 UDP/IP Server with Auxiliary Server C-6 UDP/IP Client FIGURES 1-1 Client-Server Model 1-2 Port Number Ranges 1-3 Device-Socket 2-1 Communication Between the Local Host and a Remote Host 3-1 I/O Status Block 3-2 Specifying an Input Parameter List 3-3 Specifying the Local or Remote Socket Name 3-4 Specifying Socket Options 3-5 Specifying IOCTL Functions 3-6 Getting Socket Options 3-7 Getting IOCTL Parameters 4-1 Single Item Descriptor 4-2 I/O Status Block TABLES 2-1 Calling Sequence for Application Programs 3-1 $QIO System Service Calls 3-2 Function-Dependent $QIO Arguments 3-3 Internet Symbol Definition Files 4-1 Symbolic Names for $GETDVI 4-2 Device Unit Status Symbolic Names 4-3 Internet I/O Function Codes 4-4 Symbol Definition Macros 4-5 Valid INET Subfunction Codes 4-6 Valid Flags for the p4 Argument 4-7 The p6 Socket Options 4-8 TCP/IP Options 4-9 IOCTL Commands 4-10 Valid Protocols for IO$_SETMODE and IO$_SETCHAR 4-11 Valid Socket Types for IO$_SETMODE and IO$_SETCHAR 4-12 Communications Socket Options 4-13 TCP/IP Options 4-14 Valid WRITE Flags for the p4 Argument A-1 Calling Sequence for Application Programs (TCP/IP) B-1 Calling Sequence for Application Programs (UDP/IP) D-1 Translation of Socket Error Codes to VMS Error Codes E-1 errno Values E-2 Basic Communication Routines E-3 Auxiliary Communication Routines E-4 Communications Socket Options E-5 TCP/IP Options E-6 Supported Communication Routines