- Unison Kernel
- Pthread Cancellation
- Message Queues
- Conditional Variables
- Memory Allocation
- Directory Services
- Unison I/O Library
- Unison STDIO Library
- STDIO Library Calls
- Do-nothing Stubs
- STDIO Library Calls
- Unison LIBC Library
- Unison I/O Servers
- Graphics, Camera, Video, Audio
- Network Protocols
- TCP and UDP Server - tcpd
- DHCP Client Service - dhcp client
- DHCP Server - dhcpd
- Telnet Server - telnetd
- Tiny FTP Server - tftpd
- Point to Point - pppd
- Network Translation - NAT with PAT
- Tiny HTTP Server - thttpd
- Tiny HTTP Server with TLS
- POP3 Server
- Simple Mail Transfer Protocol Services (SMTP)
- Bootp Protocol
- File Transfer Protocol Server (FTP)
- File Transfer Client Services
- RPC / XDR
- DNS Client
- HTTP/HTTPS Client
- REST Client
- AutoIP Service - autoip client
- mDNS server - mdnsd
- SNTP Client
- SNMP Agent - Snmpd server
- SSL/TLS library
- SSH server
- IP security
- Power Control
- Serial I/O
- System Services
- Universal Serial Bus (USB)
- Remedy Tools for Unison
socket – create an endpoint for communication
- int socket(int domain , int type , int protocol );
The socket() function creates an endpoint for communication and returns a descriptor.
The domain parameter specifies a communications domain within which communication will take place; this selects the protocol family which should be used. The protocol family generally is the same as the address family for the addresses supplied in later operations on the socket.
These families are defined in the include file <sys/socket.h>.
The currently implemented domains are:
- Provide support for Internet Protocol version 4, (IPv4) 32 bit (4 byte) address structures.
- Provide support for Internet Protocol version 6, (IPv6) 128 bit (16 byte) address structures.
The socket has the indicated type, which specifies the communication semantics. Currently defined types are:
- Provides sequenced, reliable, two-way connection-based byte streams. An out-of-band data transmission mechanism may be supported.
- Supports datagrams (connectionless, unreliable messages of a fixed (typically small) maximum length).
- Provides access to internal network interfaces. If this type is set, the application connects directly to the IP layer and does not use either the TCP or UDP transports.
Sockets of type SOCK_STREAM are full-duplex byte streams, similar to pipes. A stream socket must be in a connected state before any data may be sent or received on it. A connection to another socket is created with a connect() call. Once connected, data may be transferred using read() and write() calls or some variant of the send() and recv() calls. When a session has been completed, a close() may be performed. Out-of-band data may also be transmitted as described on the send() manual page and received as described on the recv() manual page.
The communications protocols used to implement a SOCK_STREAM insure that data is not lost or duplicated. If a piece of data for which the peer protocol has buffer space cannot be successfully transmitted within a reasonable length of time, then the connection is considered broken and calls will indicate an error with -1 returns and with ETIMEDOUT as the specific code in the global variable errno. The protocols optionally keep sockets warm by forcing transmissions roughly every minute in the absence of other activity. An error is then indicated if no response can be elicited on an otherwise idle connection for a extended period (for instance 5 minutes).
SOCK_DGRAM and SOCK_RAW sockets allow datagrams to be sent to correspondents named in sendto() calls. Datagrams are generally received with recvfrom(), which returns the next datagram with its return address.
The protocol parameter specifies a particular protocol to be used with the socket. Normally only a single protocol exists to support a particular socket type within a given protocol family. However, multiple protocols may exist, in which case a particular protocol must be specified in this manner. The protocol number to use is particular to the communication domain in which communication is to take place. If a protocol is specified by the caller, then it will be packaged into a socket level option request and sent to the underlying protocol layers.
If protocol has been specified, but no exact match for the tuplet family, type, protocol is found, then the first entry containing the specified family and type with zero for protocol will be used.
A -1 is returned if an error occurs. Otherwise the return value is a descriptor referencing the socket.
This function is a member of Unison’s IOLIB family of functions. IOLIB is implemented as a message passing and generalized interface layer. Each Unison I/O server is responsible for its own error reporting.
For an exact list of error codes returned by a particular server, refer to that server’s documentation in the Unison Programmer’s Guide for each specific platform.
Servers may implement these errors codes in response to this function.
The socket() call fails if:
- The caller does not have appropriate privileges. is denied.
- The per-process descriptor table is full.
- Insufficient user memory is available.
- The protocol is not supported by the address family, or the protocol is not supported by the implementation.
- The socket type is not supported by the protocol.