Create an endpoint for communication
#include <sys/types.h> #include <sys/socket.h> int socket( int domain, int type, int protocol );
For more information, see below.
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.
SOCK_DGRAM and SOCK_RAW sockets
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.
Socket-level options
The operation of sockets is controlled by socket-level options. These options are defined in the file <sys/socket.h>. Use setsockopt() and getsockopt() to set and get options.
A descriptor referencing the socket, or -1 if an error occurs (errno is set).
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | No |
Thread | Yes |
By default, socket() communicates with the TCP/IP stack managing the /dev/socket portion of the namespace. You can change this behavior by setting the SOCK environment variable. For an example, see "Running multiple instances of the TCP/IP stack" in the TCP/IP Networking chapter of the Neutrino User's Guide.