1、socket返回的套接字用于listen、bind或者connect,服务端调用listen、bind之后再用于生产accept_fd,客户端则connect后直接可以读写和服务端通讯。
2、accept调用socket产生的套接字并返回xi套接新的,用于和客户端通讯读写,若一台服务器的一个端口连接了三个客户端,则有一个sock_fd和三个accept_fd,共四个套接字描述符。
3、accept返回成功后,可以直接关闭socket产生的套接字sock_fd,不影响后面accept_fd的通讯。
4、客户端关闭连接后,服务器需要关闭所有套接字,包括socket_fd和accept_fd。
举例:一个客户端和一个服务端连接
双方socket产生各自的c_sock_fd和s_sock_fd;
s_sock_fd进行bind和listen后,accept准备接受客户端的连接请求;
c_sock_fd调用connect请求连接服务端;
服务端接到请求产生accept_fd,届时accept_fd和c_sock_fd两个套接字可以通讯,而s_sock_fd则可以关闭;
客户端关闭close(c_sock_fd)后,服务端关闭所有未关闭的fd,通讯彻底断开。
(服务端的socket产生的套接字只是用来监听的,不能直接用于发送接收数据。)