3. With all the functions, explain Berkley sockets and write socket program.
Answer:
Berkeley Sockets
Berkeley sockets is an application programming interface (API) for Internet sockets and Unix domain
sockets, used for inter-process communication (IPC). It is commonly implemented as a library of
linkable modules. It originated with the 4.2BSD Unix operating system, which was released in 1983
- socket() creates a new socket of a certain type, identified by an integer number, and
allocates system resources to it. - bind() is typically used on the server side, and associates a socket with a socket address
structure, i.e. a specified local IP address and a port number. - listen() is used on the server side, and causes a bound TCP socket to enter listening state.
- connect() is used on the client side, and assigns a free local port number to a socket. In
case of a TCP socket, it causes an attempt to establish a new TCP connection. - accept() is used on the server side. It accepts a received incoming attempt to create a new
TCP connection from the remote client, and creates a new socket associated with the
socket address pair of this connection. - send(), recv(), sendto(), and recvfrom() are used for sending and receiving data. The
standard functions write() and read() may also be used. - close() causes the system to release resources allocated to a socket. In case of TCP, the
connection is terminated. - gethostbyname() and gethostbyaddr() are used to resolve host names and addresses. IPv4
only. - getaddrinfo() and freeaddrinfo() are used to resolve host names and addresses. IPv4,
IPv6. - select() is used to suspend, waiting for one or more of a provided list of sockets to be
ready to read, ready to write, or that have errors. - poll() is used to check on the state of a socket in a set of sockets. The set can be tested to
see if any socket can be written to, read from or if an error occurred. - getsockopt() is used to retrieve the current value of a particular socket option for the
specified socket. - setsockopt() is used to set a particular socket option for the specified socket.