My question is based on the following understanding
I tried to implement my own server where
socket()
andaccept()
returns different socket descriptor value (Is it always the case?).
Yes.
My question is why is it said that
accept()
creates a new socket if no new port is opened in server and ip:port is same for both the socket descriptors returned bysocket()
andaccept()
. If new socket is created byaccept()
how is it different than the socket created bysocket()
?
Because the initial socket is used to wait for communication while the second is used to communicate. A call to socket
(+bind
+listen
) prepare a communication end-point, aka socket (or server socket) to receive incoming calls. A call to accept
on a well prepared communication point, waits for an incoming call, and when this happens that creates a communication channel (2 end-points + protocol) represented by the connected socket returned by the call.
C API may confuse you because both are called socket, but are really not for the same use. In some other languages/API differentiation is made. For example in Java you have ServerSocket
that is used to wait for incoming calls, and Socket
that are used to communicate.