http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html
zh.wikipedia.org/wiki/網路插座
在作業系統中,通常會為應用程式提供一組應用程式介面(API),稱為插座介面(英语:socket API)。應用程式可以通過插座介面,來使用網路插座,以進行資料交換。最早的插座介面來自於4.2 BSD,因此現代常見的插座介面大多源自Berkeley套接字(Berkeley sockets)標準。在插座介面中,以IP地址及通訊埠組成插座位址(socket address)。遠端的插座位址,以及本地的插座位址完成連線後,再加上使用的协议(protocol),这个五元组(five-element tuple),作为插座對(socket pairs),之後就可以彼此交換資料。例如,再同一台计算机上,TCP协议与UDP协议可以同时使用相同的port而互不干扰。 作業系統根據插座地址,可以決定應該將資料送達特定的行程或執行緒。這就像是電話系統中,以電話號碼加上分機號碼,來決定通話對象一般。
This example, modeled according to the Berkeley socket interface, sends the string "Hello, world!" via TCP to port 80 of the host with address 1.2.3.4. It illustrates the creation of a socket (getSocket), connecting it to the remote host, sending the string, and finally closing the socket:
Socket socket = getSocket(type = "TCP") connect(socket, address = "1.2.3.4", port = "80") send(socket, "Hello, world!") close(socket)
en.wikipedia.org/wiki/Network_socket
The term "socket" is analogous to physical female connectors, communication between two nodes through a channel being visualized as a cable with two male connectors plugging into sockets at each node. Similarly, the term "port" (another term for a female connector) is used for external endpoints at a node, and the term "socket" is also used for an internal endpoint of local inter-process communication (IPC) (not over a network). However, the analogy is strained, as network communication need not be one-to-one or have a channel.
Linux socket通信——并发服务器(fork) - CSDN博客 https://blog.csdn.net/w_z_q/article/details/45243765
2015年04月24日 10:52:42
socket通信——并发服务器(fork)
一、迭代服务器和并发服务器
迭代服务器会依次处理客户端的连接 ,只要当前连接的任务没有完成,服务器的进程就会一直被占用,直到任务完成后,服务器关闭这个socket,释放连接。
它的原型可以描述成:
如下是具体连接过程:
(1)服务器阻塞于accept调用且来自客户的连接请求到达时的客户端与服务器的状态。
(2)从accept返回后,连接已经在内核中注册,并且新的套接口connfd被创建。这是一个已建起连接的套接口,可以进行数据的读写。
(3)并发服务器在调用fork之后,listenfd和connfd这两个描述字在父进程以及子进程之间共享(实际为其中一份为copy),各自的引用计数为变成2.
(4)接下来是由父进程关闭已连接套接口(connfd),由子进程关闭监听套接口(listenfd)。进行这个操作之后,那么就可以让子进程来处理与客户的连接,而父进程可以在监听套接口上再次调用accept来处理下一个客户的连接。