In linux, the parent-child process sharing port nginx uses the parent-child process sharing port, so nginx is fast. This is also a reason # include <unistd. h> # include <stdlib. h> # include <sys/types. h> # include <stdio. h> # include <sys/socket. h> # include <netinet/in. h> # include <string. h> int main () {int sfp, nfp; struct sockaddr_in s_add, c_add; int sin_size; unsigned short portnum = 8888; printf ("Hello, welcome to my server! \ R \ n "); sfp = socket (AF_INET, SOCK_STREAM, 0); if (-1 = sfp) {printf (" socket fail! \ R \ n "); return-1;} printf (" socket OK! \ R \ n "); bzero (& s_add, sizeof (struct sockaddr_in); s_add.sin_family = AF_INET; region = htonl (INADDR_ANY); s_add.sin_port = htons (portnum ); if (-1 = bind (sfp, (struct sockaddr *) (& s_add), sizeof (struct sockaddr) {printf ("bind fail! \ R \ n "); return-1;} printf (" bind OK! \ R \ n "); if (-1 = listen (sfp, 5) {printf (" listen fail! \ R \ n "); return-1;} printf (" listen OK \ r \ n "); fork (); while (1) {sin_size = sizeof (struct sockaddr_in); nfp = accept (sfp, (struct sockaddr *) (& c_add), & sin_size ); printf ("\ t \ tprocess is % ld \ n", (long) getpid (); if (-1 = nfp) {printf ("accept fail! \ R \ n "); return-1;} printf (" accept OK! \ R \ nServer start get connect from % # x: % # x \ r \ n ", ntohl (c_add.sin_addr.s_addr), ntohs (c_add.sin_port )); if (-1 = write (nfp, "hello, welcome to my server \ r \ n", 32) {printf ("write fail! \ R \ n "); return-1;} printf (" write OK! \ R \ n "); close (nfp);} close (sfp); return 0;} client # include <stdlib. h> # include <sys/types. h> # include <stdio. h> # include <sys/socket. h> # include <netinet/in. h> # include <string. h> int main () {int cfd; int recbytes; int sin_size; char buffer [1024] = {0}; struct sockaddr_in s_add, c_add; unsigned short portnum = 8888; printf ("Hello, welcome to client! \ R \ n "); cfd = socket (AF_INET, SOCK_STREAM, 0); if (-1 = cfd) {printf (" socket fail! \ R \ n "); return-1;} printf (" socket OK! \ R \ n "); bzero (& s_add, sizeof (struct sockaddr_in); s_add.sin_family = AF_INET; region = inet_addr (" 127.0.0.1 "); s_add.sin_port = htons (portnum ); printf ("s_addr =%# x, port: % # x \ r \ n", s_add.sin_addr.s_addr, s_add.sin_port); if (-1 = connect (cfd, (struct sockaddr *) (& s_add), sizeof (struct sockaddr) {printf ("connect fail! \ R \ n "); return-1;} printf (" connect OK! \ R \ n "); if (-1 = (recbytes = read (cfd, buffer, 1024) {printf (" read data fail! \ R \ n "); return-1;} printf (" read OK \ r \ nREC: \ r \ n "); buffer [recbytes] = '\ 0 '; printf ("% s \ r \ n", buffer); getchar (); close (cfd); return 0;} run the client multiple times, the displayed process numbers are different Hello, welcome to my server! Socket OK! Bind OK! Listen OK process is 3277 accept OK! Server start get connect from 0x7f000001: 0xc67d write OK! Process is 3278 accept OK! Server start get connect from 0x7f000001: 0xc681 write OK! Process is 3277 accept OK! Server start get connect from 0x7f000001: 0xc682 write OK! Process is 3278 accept OK! Server start get connect from 0x7f000001: 0xc683 write OK!