QNX Developer Support
|This version of this document is no longer maintained. For the latest documentation, see http://www.qnx.com/developers/docs.|
Create an endpoint for communication
#include <sys/types.h> #include <sys/socket.h> int socket( int domain, int type, int protocol );
- The communications domain that you want to use. This selects the protocol family that should be used. These families are defined in <sys/socket.h>.
- The type of socket you want to create.
This determines the semantics of communication.
Here are the currently defined types:
- SOCK_STREAM -- provides sequenced, reliable, two-way, connection-based byte streams. An out-of-band data transmission mechanism may be supported.
- SOCK_DGRAM -- supports datagrams, which are connectionless, unreliable messages of a fixed (typically small) maximum length.
- SOCK_RAW -- provides access to internal network protocols and interfaces. Available only to the superuser, this type isn't described here.
For more information, see below.
- The particular protocol that you want to use with the socket. Normally, only a single protocol exists to support a particular socket type within a given protocol family. But if many protocols exist, you must specify one. The protocol number you give is particular to the communication domain where communication is to take place (see /etc/protocols in the Utilities Reference).
Use the -l socket option to qcc to link against this library.
The socket() function creates an endpoint for communication and returns a descriptor.
SOCK_STREAM sockets 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. To create a connection to another socket, call connect() call.
Once the socket is connected, you can transfer data by using read() and write() or some variant of send() and recv(). When a session has been completed, a close() may be performed. Out-of-band data may also be transmitted (as described in send()) and received (as described in recv()).
The communications protocols used to implement a SOCK_STREAM socket ensure that data isn't lost or duplicated. If a piece of data that the peer protocol has buffer space for can't be successfully transmitted within a reasonable length of time, the connection is considered broken and calls will indicate an error by returning -1 and setting errno to ETIMEDOUT.
With SOCK_DGRAM and SOCK_RAW sockets, datagrams can be sent to correspondents named in send() calls. Datagrams are generally received with recvfrom(), which returns the next datagram with its return address.
You can use the ioctl() call to specify a process group to receive a SIGURG signal when the out-of-band data arrives. The call may also enable nonblocking I/O and asynchronous notification of I/O events via SIGIO.
A descriptor referencing the socket, or -1 if an error occurs (errno is set).
- Permission to create a socket of the specified type and/or protocol is denied.
- The per-process descriptor table is full.
- The system file table is full.
- Insufficient buffer space available. The socket can't be created until sufficient resources are freed.
- Not enough memory.
- The protocol type or the specified protocol isn't supported within this domain.
By default, socket() communicates with the TCP/IP stack managing the /dev/socket portion of the namespace. This behavior can be controlled via the SOCK environmental variable. See the examples in the npm-tcpip.so utility.