home *** CD-ROM | disk | FTP | other *** search
- TABLE OF CONTENTS
-
- protocols/arp
- protocols/icmp
- protocols/if
- protocols/inet
- protocols/ip
- protocols/lo
- protocols/routing
- protocols/tcp
- protocols/udp
- protocols/arp protocols/arp
-
- NAME
- arp - Address Resolution Protocol
-
- CONFIG
- Any SANA-II device driver using ARP
-
- SYNOPSIS
- #include <sys/socket.h>
- #include <net/if_arp.h>
- #include <netinet/in.h>
-
- s = socket(AF_INET, SOCK_DGRAM, 0);
-
- DESCRIPTION
- ARP is a protocol used to dynamically map between Internet
- Protocol (IP) and hardware addresses. It can be used by most
- the SANA-II network interface drivers. The current
- implementation supports only Internet Protocol (and is tested
- only with Ethernet). However, ARP is not limited to only that
- combination.
-
- ARP caches IP-to-hardware address mappings. When an interface
- requests a mapping for an address not in the cache, ARP queues
- the message which requires the mapping and broadcasts a
- message on the associated network requesting the address
- mapping. If a response is provided, the new mapping is cached
- and any pending message is transmitted. ARP will queue at most
- one packet while waiting for a mapping request to be responded
- to; only the most recently transmitted packet is kept.
-
- The address mapping caches are separate for each interface. The
- amount of mappings in the cache may be specified with an
- IoctlSocket() request.
-
- To facilitate communications with systems which do not use ARP,
- IoctlSocket() requests are provided to enter and delete entries
- in the IP-to-Ethernet tables.
-
- USAGE
- #include <sys/ioctl.h>
- #include <sys/socket.h>
- #include <net/if.h>
- #include <net/if_arp.h>
-
- struct arpreq arpreq;
-
- IoctlSocket(s, SIOCSARP, (caddr_t)&arpreq);
- IoctlSocket(s, SIOCGARP, (caddr_t)&arpreq);
- IoctlSocket(s, SIOCDARP, (caddr_t)&arpreq);
-
- These three IoctlSocket()s take the same structure as an argument.
- SIOCSARP sets an ARP entry, SIOCGARP gets an ARP entry, and SIOCDARP
- deletes an ARP entry. These IoctlSocket() requests may be applied to
- any socket descriptor (s). The arpreq structure contains:
-
- /* Maximum number of octets in protocol/hw address */
- #define MAXADDRARP 16
-
- /*
- * ARP ioctl request.
- */
- struct arpreq {
- struct sockaddr arp_pa; /* protocol address */
- struct { /* hardware address */
- u_char sa_len; /* actual length + 2 */
- u_char sa_family;
- char sa_data[MAXADDRARP];
- } arp_ha;
- int arp_flags; /* flags */
- };
-
- /* arp_flags and at_flags field values */
- #define ATF_INUSE 0x01 /* entry in use */
- #define ATF_COM 0x02 /* completed entry */
- #define ATF_PERM 0x04 /* permanent entry */
- #define ATF_PUBL 0x08 /* publish entry */
-
-
- The interface whose ARP table is manipulated is specified by
- arp_pa sockaddr. The address family for the arp_pa sockaddr
- must be AF_INET; for the arp_ha sockaddr it must be AF_UNSPEC.
- The length of arp_ha must match the length of used hardware
- address. Maximum length for the hardware address is MAXADDRARP
- bytes. The only flag bits which may be written are ATF_PERM
- and ATF_PUBL. ATF_PERM makes the entry permanent if the
- IoctlSocket() call succeeds. ATF_PUBL specifies that the ARP
- code should respond to ARP requests for the indicated host
- coming from other machines. This allows a host to act as an
- ARP server which may be useful in convincing an ARP-only
- machine to talk to a non-ARP machine.
-
- UNSUPPORTED IN AmiTCP/IP
-
- AmiTCP/IP EXTENSIONS
- There is an extension to the standard BSD4.4 ARP ioctl interface to
- access the contents of the whole ARP mapping cache. (In the BSD4.4
- the static ARP table is accessed via the /dev/kmem.) The SIOCGARPT
- ioctl takes the following arptabreq structure as an argument:
-
- /*
- * An AmiTCP/IP specific ARP table ioctl request
- */
- struct arptabreq {
- struct arpreq atr_arpreq; /* To identify the interface */
- long atr_size; /* # of elements in atr_table */
- long atr_inuse; /* # of elements in use */
- struct arpreq *atr_table;
- };
-
- The atr_arpreq specifies the used interface. The hardware address
- for the interface is returned in the arp_ha field of atr_arpreq
- structure.
-
- The SIOCGARPT ioctl reads at most atr_size entries from the cache
- into the user supplied buffer atr_table, if it is not NULL. Actual
- amount of returned entries is returned in atr_size. The current
- amount of cached mappings is returned in the atr_inuse.
-
- The SIOCGARPT ioctl has following usage:
-
- struct arpreq cache[N];
- struct arptabreq arptab = { N, 0, cache };
-
- IoctlSocket(s, SIOCGARPT, (caddr_t)&arptabreq);
-
- DIAGNOSTICS
- ARP watches passively for hosts impersonating the local host
- (that is, a host which responds to an ARP mapping request
- for the local host's address).
-
- "duplicate IP address a.b.c.d!!"
- "sent from hardware address: %x:%x:...:%x:%x"
-
- ARP has discovered another host on the local network
- which responds to mapping requests for its own Internet
- address.
-
- BUGS
- The ARP is tested only with Ethernet. Other network hardware may
- require special ifconfig configuration.
-
- SEE ALSO
- inet, netutil/arp, netutil/ifconfig, <net/if_arp.h>
-
- Plummer, Dave, ``An Ethernet Address Resolution Protocol
- -or- Converting Network Protocol Addresses to 48.bit Ether-
- net Addresses for Transmission on Ethernet Hardware,'' RFC
- 826, Network Information Center, SRI International, Menlo
- Park, Calif., November 1982. (Sun 800-1059-10)
-
- protocols/icmp protocols/icmp
-
- NAME
- icmp - Internet Control Message Protocol
-
- SYNOPSIS
- #include <sys/socket.h>
- #include <netinet/in.h>
-
- int
- socket(AF_INET, SOCK_RAW, proto)
-
- DESCRIPTION
- ICMP is the error and control message protocol used by IP and the
- Internet protocol family. It may be accessed through a ``raw
- socket'' for network monitoring and diagnostic functions. The proto
- parameter to the socket call to create an ICMP socket is obtained
- from getprotobyname(). ICMP sockets are connectionless, and are
- normally used with the sendto() and recvfrom() calls, though the
- connect() call may also be used to fix the destination for future
- packets (in which case the recv() and send() socket library calls
- may be used).
-
- Outgoing packets automatically have an IP header prepended to them
- (based on the destination address). Incoming packets are received
- with the IP header and options intact.
-
- DIAGNOSTICS
- A socket operation may fail with one of the following errors
- returned:
-
- [EISCONN] when trying to establish a connection on a socket
- which already has one, or when trying to send a
- datagram with the destination address specified and
- the socket is already connected;
-
- [ENOTCONN] when trying to send a datagram, but no destination
- address is specified, and the socket hasn't been
- connected;
-
- [ENOBUFS] when the system runs out of memory for an internal
- data structure;
-
- [EADDRNOTAVAIL] when an attempt is made to create a socket with a
- network address for which no network interface
- exists.
-
- SEE ALSO
- bsdsocket.library/send(), bsdsocket.library/recv(), inet, ip
-
- HISTORY
- The icmp protocol is originally from 4.3BSD.
-
- protocols/if protocols/if
-
- NAME
- if - Network Interface to SANA-II devices
-
- DESCRIPTION
- Each network interface in the AmiTCP/IP corresponds to a path
- through which messages may be sent and received. A network
- interface usually has a SANA-II device driver associated with it,
- though the loopback interface, "lo", do not. The network interface
- in the AmiTCP/IP (sana_softc) is superset of the BSD Unix network
- interface.
-
- When the network interface is first time referenced, AmiTCP/IP tries
- to open the corresponding SANA-II device driver. If successful, a
- software interface to the SANA-II device is created. The "network/"
- prefix is added to the SANA-II device name, if needed. Once the
- interface has acquired its address, it is expected to install a
- routing table entry so that messages can be routed through it.
-
- The SANA-II interfaces must be configured before they will allow
- traffic to flow through them. It is done after the interface is
- assigned a protocol address with a SIOCSIFADDR ioctl. Some
- interfaces may use the protocol address or a part of it as their
- hardware address. On interfaces where the network-link layer address
- mapping is static, only the network number is taken from the ioctl;
- the remainder is found in a hardware specific manner. On interfaces
- which provide dynamic network-link layer address mapping facilities
- (for example, Ethernets or Arcnets using ARP), the entire address
- specified in the ioctl is used.
-
- The following ioctl calls may be used to manipulate network
- interfaces. Unless specified otherwise, the request takes an ifreq
- structure as its parameter. This structure has the form
-
- struct ifreq {
- char ifr_name[IFNAMSIZ]; /* interface name (eg. "slip.device/0")*/
- union {
- struct sockaddr ifru_addr;
- struct sockaddr ifru_dstaddr;
- short ifru_flags;
- } ifr_ifru;
- #define ifr_addr ifr_ifru.ifru_addr /* address */
- #define ifr_dstaddr ifr_ifru.ifru_dstaddr /* end of p-to-p link */
- #define ifr_flags ifr_ifru.ifru_flags /* flags */
- };
-
- SIOCSIFADDR Set interface address. Following the address
- assignment, the ``initialization'' routine for
- the interface is called.
-
- SIOCGIFADDR Get interface address.
-
- SIOCSIFDSTADDR Set point to point address for interface.
-
- SIOCGIFDSTADDR Get point to point address for interface.
-
- SIOCSIFFLAGS Set interface flags field. If the interface is
- marked down, any processes currently routing
- packets through the interface are notified.
-
- SIOCGIFFLAGS Get interface flags.
-
- SIOCGIFCONF Get interface configuration list. This request
- takes an ifconf structure (see below) as a
- value-result parameter. The ifc_len field should be
- initially set to the size of the buffer pointed to
- by ifc_buf. On return it will contain the length,
- in bytes, of the configuration list.
-
- /*
- * Structure used in SIOCGIFCONF request.
- * Used to retrieve interface configuration
- * for machine (useful for programs which
- * must know all networks accessible).
- */
- struct ifconf {
- int ifc_len; /* size of associated buffer */
- union {
- caddr_t ifcu_buf;
- struct ifreq *ifcu_req;
- } ifc_ifcu;
- #define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
- #define ifc_req ifc_ifcu.ifcu_req /* array of structures returned */
- };
-
-
- UNSUPPORTED IN AmiTCP/IP
- These standard BSD ioctl codes are not currently supported:
-
- SIOCADDMULTI Enable a multicast address for the interface.
-
- SIOCDELMULTI Disable a previously set multicast address.
-
- SIOCSPROMISC Toggle promiscuous mode.
-
- AmiTCP/IP EXTENSIONS
- The following ioctls are used to configure protocol and hardware
- specific properties of a sana_softc interface. They are used in the
- AmiTCP/IP only.
-
- SIOCSSANATAGS Set SANA-II specific properties with a tag list.
-
- SIOCGSANATAGS Get SANA-II specific properties into a
- wiretype_parameters structure and a user tag list.
-
- struct wiretype_parameters
- {
- ULONG wiretype; /* the wiretype of the interface */
- WORD flags; /* iff_flags */
- struct TagItem *tags; /* tag list user provides */
- };
-
- SEE ALSO
- arp, lo, netutil/arp, netutil/ifconfig, <sys/ioctl.h>, <net/if.h>,
- <net/sana2tags.h>
-
- protocols/inet protocols/inet
-
- NAME
- inet - Internet protocol family
-
- SYNOPSIS
- #include <sys/types.h>
- #include <netinet/in.h>
-
- DESCRIPTION
- The Internet protocol family implements a collection of protocols
- which are centered around the Internet Protocol (IP) and which share
- a common address format. The Internet family provides protocol
- support for the SOCK_STREAM, SOCK_DGRAM, and SOCK_RAW socket types.
-
- PROTOCOLS
- The Internet protocol family is comprised of the Internet Protocol
- (IP), the Address Resolution Protocol (ARP), the Internet Control
- Message Protocol (ICMP), the Transmission Control Protocol (TCP),
- and the User Datagram Protocol (UDP).
-
- TCP is used to support the SOCK_STREAM abstraction while UDP is used
- to support the SOCK_DGRAM abstraction; (SEE ALSO tcp, SEE ALSO udp).
- A raw interface to IP is available by creating an Internet socket of
- type SOCK_RAW; (SEE ALSO ip). ICMP is used by the kernel to handle
- and report errors in protocol processing. It is also accessible to
- user programs; (SEE ALSO icmp). ARP is used to translate 32-bit IP
- addresses into varying length hardware addresses; (SEE ALSO arp).
-
- The 32-bit IP address is divided into network number and host number
- parts. It is frequency-encoded; the most significant bit is zero in
- Class A addresses, in which the high-order 8 bits are the network
- number. Class B addresses have their high order two bits set to 10
- and use the highorder 16 bits as the network number field. Class C
- addresses have a 24-bit network number part of which the high order
- three bits are 110. Sites with a cluster of local networks may
- chose to use a single network number for the cluster; this is done
- by using subnet addressing. The local (host) portion of the address
- is further subdivided into subnet number and host number parts.
- Within a subnet, each subnet appears to be an individual network;
- externally, the entire cluster appears to be a single, uniform
- network requiring only a single routing entry. Subnet addressing is
- enabled and examined by the following ioctl commands on a datagram
- socket in the Internet domain; they have the same form as the
- SIOCIFADDR (SEE ALSO if) command.
-
- SIOCSIFNETMASK Set interface network mask. The network mask
- defines the network part of the address; if it
- contains more of the address than the address
- type would indicate, then subnets are in use.
-
- SIOCGIFNETMASK Get interface network mask.
-
- ADDRESSING
- IP addresses are four byte quantities, stored in network byte order
- (the native Amiga byte order)
-
- Sockets in the Internet protocol family use the following
- addressing structure:
- struct sockaddr_in {
- short sin_family;
- u_short sin_port;
- struct in_addr sin_addr;
- char sin_zero[8];
- };
-
- Functions in bsdsocket.library are provided to manipulate structures
- of this form.
-
- The sin_addr field of the sockaddr_in structure specifies a local or
- remote IP address. Each network interface has its own unique IP
- address. The special value INADDR_ANY may be used in this field to
- effect "wildcard" matching. Given in a bind() call, this value
- leaves the local IP address of the socket unspecified, so that the
- socket will receive connections or messages directed at any of the
- valid IP addresses of the system. This can prove useful when a
- process neither knows nor cares what the local IP address is or when
- a process wishes to receive requests using all of its network
- interfaces. The sockaddr_in structure given in the bind() call must
- specify an in_addr value of either IPADDR_ANY or one of the system's
- valid IP addresses. Requests to bind any other address will elicit
- the error EADDRNOTAVAIL. When a connect() call is made for a socket
- that has a wildcard local address, the system sets the sin_addr
- field of the socket to the IP address of the network interface that
- the packets for that connection are routed via.
-
- The sin_port field of the sockaddr_in structure specifies a port
- number used by TCP or UDP. The local port address specified in a
- bind() call is restricted to be greater than IPPORT_RESERVED
- (defined in <netinet/in.h>) unless the creating process is running
- as the super-user, providing a space of protected port numbers. In
- addition, the local port address must not be in use by any socket of
- same address family and type. Requests to bind sockets to port
- numbers being used by other sockets return the error EADDRINUSE. If
- the local port address is specified as 0, then the system picks a
- unique port address greater than IPPORT_RESERVED. A unique local
- port address is also picked when a socket which is not bound is used
- in a connect() or send() call. This allows programs which do not
- care which local port number is used to set up TCP connections by
- sim- ply calling socket() and then connect(), and to send UDP
- datagrams with a socket() call followed by a send() call.
-
- Although this implementation restricts sockets to unique local port
- numbers, TCP allows multiple simultaneous connections involving the
- same local port number so long as the remote IP addresses or port
- numbers are different for each connection. Programs may explicitly
- override the socket restriction by setting the SO_REUSEADDR socket
- option with setsockopt (see getsockopt()).
-
- SEE ALSO
- bsdsocket.library/bind(), bsdsocket.library/connect(),
- bsdsocket.library/getsockopt(), bsdsocket.library/IoctlSocket(),
- bsdsocket.library/send(), bsdsocket.library/socket(),
- bsdsocket.library/gethostent(), bsdsocket.library/getnetent(),
- bsdsocket.library/getprotoent(), bsdsocket.library/getservent(),
- bsdsocket.library/inet_addr(), arp, icmp, ip, tcp, udp
-
- Network Information Center, DDN Protocol Handbook (3 vols.),
- Network Information Center, SRI International, Menlo Park,
- Calif., 1985.
- A AmiTCP/IP Interprocess Communication Primer
-
- WARNING
- The Internet protocol support is subject to change as the Internet
- protocols develop. Users should not depend on details of the
- current implementation, but rather the services exported.
-
- protocols/ip protocols/ip
-
- NAME
- ip - Internet Protocol
-
- SYNOPSIS
- #include <sys/socket.h>
- #include <netinet/in.h>
-
- int
- socket(AF_INET, SOCK_RAW, proto)
-
- DESCRIPTION
- IP is the transport layer protocol used by the Internet protocol
- family. Options may be set at the IP level when using higher-level
- protocols that are based on IP (such as TCP and UDP). It may also be
- accessed through a ``raw socket'' when developing new protocols, or
- special purpose applica- tions.
-
- A single generic option is supported at the IP level, IP_OPTIONS,
- that may be used to provide IP options to be transmitted in the IP
- header of each outgoing packet. Options are set with setsockopt()
- and examined with getsockopt(). The format of IP options to be sent
- is that specified by the IP protocol specification, with one
- exception: the list of addresses for Source Route options must
- include the first-hop gateway at the beginning of the list of
- gateways. The first-hop gateway address will be extracted from the
- option list and the size adjusted accordingly before use. IP
- options may be used with any socket type in the Internet family.
-
- Raw IP sockets are connectionless, and are normally used with the
- sendto and recvfrom calls, though the connect() call may also be
- used to fix the destination for future packets (in which case the
- recv() and send() system calls may be used).
-
- If proto is 0, the default protocol IPPROTO_RAW is used for outgoing
- packets, and only incoming packets destined for that protocol are
- received. If proto is non-zero, that protocol number will be used
- on outgoing packets and to filter incoming packets.
-
- Outgoing packets automatically have an IP header prepended to them
- (based on the destination address and the protocol number the socket
- is created with). Incoming packets are received with IP header and
- options intact.
-
- DIAGNOSTICS
- A socket operation may fail with one of the following errors
- returned:
-
- [EISCONN] when trying to establish a connection on a socket
- which already has one, or when trying to send a
- datagram with the destination address specified and
- the socket is already connected;
-
- [ENOTCONN] when trying to send a datagram, but no destination
- address is specified, and the socket hasn't been
- connected;
-
- [ENOBUFS] when the system runs out of memory for an internal
- data structure;
-
- [EADDRNOTAVAIL] when an attempt is made to create a socket with a
- network address for which no network interface
- exists.
-
- The following errors specific to IP may occur when setting or
- getting IP options:
-
- [EINVAL] An unknown socket option name was given.
-
- [EINVAL] The IP option field was improperly formed; an
- option field was shorter than the minimum value or
- longer than the option buffer provided.
-
- SEE ALSO
- bsdsocket.library/getsockopt(), bsdsocket.library/send(),
- bsdsocket.library/recv(), icmp, inet
-
- HISTORY
- The ip protocol appeared in 4.2BSD.
-
- protocols/lo protocols/lo
-
- NAME
- lo - Software Loopback Network Interface
-
- SYNOPSIS
- pseudo-device
- loop
-
- DESCRIPTION
- The loop interface is a software loopback mechanism which may be
- used for performance analysis, software testing, and/or local
- communication. There is no SANA-II interface associated with lo.
- As with other network interfaces, the loopback interface must have
- network addresses assigned for each address family with which it is
- to be used. These addresses may be set or changed with the
- SIOCSIFADDR ioctl. The loopback interface should be the last
- interface configured, as protocols may use the order of
- configuration as an indication of priority. The loopback should
- never be configured first unless no hardware interfaces exist.
-
- DIAGNOSTICS
- "lo%d: can't handle af%d."
- The interface was handed a message with ad- dresses formatted in an
- unsuitable address family; the packet was dropped.
-
- SEE ALSO
- inet, if, netutil/ifconfig
-
- BUGS
- Older BSD Unix systems enabled the loopback interface
- automatically, using a nonstandard Internet address (127.1). Use
- of that address is now discouraged; a reserved host address for the
- local network should be used instead.
-
- protocols/routing protocols/routing
-
- NAME
- routing - system supporting for local network packet routing
-
- DESCRIPTION
- The network facilities provided general packet routing,
- leaving routing table maintenance to applications processes.
-
- A simple set of data structures comprise a ``routing table''
- used in selecting the appropriate network interface when
- transmitting packets. This table contains a single entry for
- each route to a specific network or host. A user process, the
- routing daemon, maintains this data base with the aid of two
- socket specific ioctl commands, SIOCADDRT and SIOCDELRT.
- The commands allow the addition and deletion of a single
- routing table entry, respectively. Routing table
- manipulations may only be carried out by super-user.
-
- A routing table entry has the following form, as defined in
- <net/route.h>:
- struct rtentry {
- u_long rt_hash;
- struct sockaddr rt_dst;
- struct sockaddr rt_gateway;
- short rt_flags;
- short rt_refcnt;
- u_long rt_use;
- struct ifnet *rt_ifp;
- };
- with rt_flags defined from:
- #define RTF_UP 0x1 /* route usable */
- #define RTF_GATEWAY 0x2 /* destination is a gateway */
- #define RTF_HOST 0x4 /* host entry (net otherwise) */
-
- Routing table entries come in three flavors: for a specific
- host, for all hosts on a specific network, for any destination
- not matched by entries of the first two types (a wildcard
- route). When the system is booted, each network interface
- autoconfigured installs a routing table entry when it wishes
- to have packets sent through it. Normally the interface
- specifies the route through it is a ``direct'' connection to
- the destination host or network. If the route is direct, the
- transport layer of a protocol family usually requests the
- packet be sent to the same host specified in the packet.
- Otherwise, the interface may be requested to address the
- packet to an entity different from the eventual recipient
- (that is, the packet is forwarded).
-
- Routing table entries installed by a user process may not
- specify the hash, reference count, use, or interface fields;
- these are filled in by the routing routines. If a route is in
- use when it is deleted (rt_refcnt is non-zero), the resources
- associated with it will not be reclaimed until all references
- to it are removed.
-
- The routing code returns EEXIST if requested to duplicate an
- existing entry, ESRCH if requested to delete a non-existent
- entry, or ENOBUFS if insufficient resources were available to
- install a new route.
-
- The rt_use field contains the number of packets sent along the
- route. This value is used to select among multiple routes to
- the same destination. When multiple routes to the same
- destination exist, the least used route is selected.
-
- A wildcard routing entry is specified with a zero destination
- address value. Wildcard routes are used only when the system
- fails to find a route to the destination host and network.
- The combination of wildcard routes and routing redirects can
- provide an economical mechanism for routing traffic.
-
- SEE ALSO
- bsdsocket.library/IoctlSocket(), netutil/route
-
- protocols/tcp protocols/tcp
-
- NAME
- tcp - Internet Transmission Control Protocol
-
- SYNOPSIS
- #include <sys/socket.h>
- #include <netinet/in.h>
-
- int
- socket(AF_INET, SOCK_STREAM, 0)
-
- DESCRIPTION
- The TCP protocol provides reliable, flow-controlled, two-way
- transmission of data. It is a byte-stream protocol used to support
- the SOCK_STREAM abstraction. TCP uses the standard Internet address
- format and, in addition, provides a per-host collection of ``port
- addresses''. Thus, each address is composed of an Internet address
- specifying the host and network, with a specific TCP port on the
- host identifying the peer entity.
-
- Sockets utilizing the tcp protocol are either ``active'' or
- ``passive''. Active sockets initiate connections to passive
- sockets. By default TCP sockets are created active; to create a
- passive socket the listen() bsdsocket.library function call must be
- used after binding the socket with the bind() bsdsocket.library
- function call. Only passive sockets may use the accept() call to
- accept incoming connections. Only active sockets may use the
- connect() call to initiate connections.
-
- Passive sockets may ``underspecify'' their location to match
- incoming connection requests from multiple networks. This
- technique, termed ``wildcard addressing'', allows a single server to
- provide service to clients on multiple networks. To create a socket
- which listens on all networks, the Internet address INADDR_ANY must
- be bound. The TCP port may still be specified at this time; if the
- port is not specified the bsdsocket.library function will assign
- one. Once a connection has been established the socket's address is
- fixed by the peer entity's location. The address assigned the
- socket is the address associated with the network interface through
- which packets are being transmitted and received. Normally this
- address corresponds to the peer entity's network.
-
- TCP supports one socket option which is set with setsockopt() and
- tested with getsockopt(). Under most circumstances, TCP sends data
- when it is presented; when outstanding data has not yet been
- acknowledged, it gathers small amounts of output to be sent in a
- single packet once an acknowledgement is received. For a small
- number of clients, such as X Window System functions that
- send a stream of mouse events which receive no replies, this
- packetization may cause significant delays. Therefore, TCP provides
- a boolean option, TCP_NODELAY (from <netinet/tcp.h>, to defeat this
- algorithm. The option level for the setsockopt call is the protocol
- number for TCP, available from getprotobyname().
-
- Options at the IP transport level may be used with TCP; SEE ALSO ip.
- Incoming connection requests that are source-routed are noted, and
- the reverse source route is used in responding.
-
- DIAGNOSTICS
- A socket operation may fail with one of the following errors
- returned:
-
- [EISCONN] when trying to establish a connection on a socket
- which already has one;
-
- [ENOBUFS] when the AmiTCP/IP runs out of memory for an internal
- data structure;
-
- [ETIMEDOUT] when a connection was dropped due to excessive
- retransmissions;
-
- [ECONNRESET] when the remote peer forces the connection to be
- closed;
-
- [ECONNREFUSED] when the remote peer actively refuses connection
- establishment (usually because no process is
- listening to the port);
-
- [EADDRINUSE] when an attempt is made to create a socket with a
- port which has already been allocated;
-
- [EADDRNOTAVAIL] when an attempt is made to create a socket with a
- network address for which no network interface
- exists.
-
- SEE ALSO
- bsdsocket.library/getsockopt(), bsdsocket.library/socket(),
- bsdsocket.library/bind(), bsdsocket.library/listen(),
- bsdsocket.library/accept(), bsdsocket.library/connect(), inet,
- ip, <sys/socket.h>, <netinet/tcp.h>, <netinet/in.h>
-
- HISTORY
- The tcp protocol stack appeared in 4.2BSD.
-
- protocols/udp protocols/udp
-
- NAME
- udp - Internet User Datagram Protocol
-
- SYNOPSIS
- #include <sys/socket.h>
- #include <netinet/in.h>
-
- int
- socket(AF_INET, SOCK_DGRAM, 0)
-
- DESCRIPTION
- UDP is a simple, unreliable datagram protocol which is used to
- support the SOCK_DGRAM abstraction for the Internet protocol family.
- UDP sockets are connectionless, and are normally used with the
- sendto() and recvfrom() calls, though the connect() call may also be
- used to fix the destination for future packets (in which case the
- recv() and send() function calls may be used).
-
- UDP address formats are identical to those used by TCP. In
- particular UDP provides a port identifier in addition to the normal
- Internet address format. Note that the UDP port space is separate
- from the TCP port space (i.e. a UDP port may not be ``connected'' to
- a TCP port). In addition broadcast packets may be sent (assuming the
- underlying network supports this) by using a reserved ``broadcast
- address''; this address is network interface dependent.
-
- Options at the IP transport level may be used with UDP; SEE ALSO ip.
-
- DIAGNOSTICS
- A socket operation may fail with one of the following errors
- returned:
-
- [EISCONN] when trying to establish a connection on a socket
- which already has one, or when trying to send a
- datagram with the destination address specified and
- the socket is already connected;
-
- [ENOTCONN] when trying to send a datagram, but no destination
- address is specified, and the socket hasn't been
- connected;
-
- [ENOBUFS] when the system runs out of memory for an
- internal data structure;
-
- [EADDRINUSE] when an attempt is made to create a socket with a
- port which has already been allocated;
-
- [EADDRNOTAVAIL] when an attempt is made to create a socket with a
- network address for which no network interface
- exists.
-
- SEE ALSO
- bsdsocket.library/getsockopt(), bsdsocket.library/recv(),
- bsdsocket.library/send(), bsdsocket.library/socket(), inet, ip
-
- HISTORY
- The udp protocol appeared in 4.2BSD.
-
-