Sockets allow communication between two different processes on the same or different machines. To be more precise, it's a way to talk to other computers using standard Unix file descriptors. In Unix, every I/O action is done by writing or reading a file descriptor. A file descriptor is just an integer associated with an open file and it can be a network connection, a text file, a terminal, or something else.
To a programmer, a socket looks and behaves much like a low-level file descriptor. This is because commands such as read() and write() work with sockets in the same way they do with files and pipes.
Where
is Socket Used?
A Unix Socket is
used in a client-server application framework. A server is a process
that performs some functions on request from a client. Most of the
application-level protocols like FTP, SMTP, and POP3 make use of
sockets to establish connection between client and server and then
for exchanging data.Syntax:
int
socket(int domain, int type, int protocol)
Here.,
Domain refers to: Socket
Family
Ex:AF_UNIX,AF_INET
,AF_NETLINK etc.
Protocol
refers to:
The type of Protocol we want to use
Ex:TCP,UDP,ICMP
etc.
Type
refers to: Socket
Service Type
Socket
Service Types:
The following
socket types are defined,The first two are most commonly used and
the last two are rarely used.Processes are presumed to communicate only between sockets of the same type but there is no restriction that prevents communication between sockets of different types.
- Stream
Sockets(SOCK_STREAM): Delivery in a networked environment is
guaranteed. If you send through the stream socket three items "A,
B, C", they will arrive in the same order - "A, B, C".
These sockets use TCP (Transmission Control Protocol) for data
transmission. If delivery is impossible, the sender receives an
error indicator. Data records do not have any boundaries.
- Datagram
Sockets(SOCK_DGRAM): Delivery in a networked environment is not
guaranteed. They're connectionless because you don't need to have an
open connection as in Stream Sockets - you build a packet with the
destination information and send it out. They use UDP (User Datagram
Protocol).
- Raw
Sockets(SOCK_RAW): These provide users access to the underlying
communication protocols, which support socket abstractions. These
sockets are normally datagram oriented, though their exact
characteristics are dependent on the interface provided by the
protocol. Raw sockets are not intended for the general user; they
have been provided mainly for those interested in developing new
communication protocols, or for gaining access to some of the more
cryptic facilities of an existing protocol.
- Sequenced
Packet Sockets(SOCK_SEQPACKET): They are similar to a stream
socket, with the exception that record boundaries are preserved.
This interface is provided only as a part of the Network Systems
(NS) socket abstraction, and is very important in most serious NS
applications. Sequenced-packet sockets allow the user to manipulate
the Sequence Packet Protocol (SPP) or Internet Datagram Protocol
(IDP) headers on a packet or a group of packets, either by writing a
prototype header along with whatever data is to be sent, or by
specifying a default header to be used with all outgoing data, and
allows the user to receive the headers on incoming packets.
Embedded Systems Training