c - Latency of establishing 1000 TCP/IP connections from client to server -
i create 1000 connections server. after of connections made start sending or receiving info on connections.
the server trivial, accepts connections , sequentially performs reads , writes. server has backlog of 8192 , blocks on read 1st connection:
// why doesn't backlog of 8192 allow client found 1000 connections? listen(serversocket, 8192); while(1) { struct sockaddr_in client_addr; socklen_t client_addr_len = sizeof(client_addr); int fd = accept(serversocket, (struct sockaddr*)&client_addr, &client_addr_len); // blocks server on read 1st connection short data1; read(fd, &data1, sizeof(data1)); char data2[32]; write(fd, data2, sizeof(data2)); close(fd); } the client contains next code:
int sockfds[1000]; int i; for(i=0; i<1000; i++) { int sockfd = socket(af_inet, sock_stream, 0); sockfds[i] = sockfd; struct sockaddr_in servaddr; bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = af_inet; servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); servaddr.sin_port = htons(5678); connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)); printf("%d: connected\n", i); } // ... read sockfds[j], write sockfds[j] the first 130 connections established in few milliseconds. however, connections 130...999 beingness established @ rate of 1 connection per second.
what should client.c in order found 1000 connections in few milliseconds? why doesn't backlog of 8192 allow client found 1000 connections?
the solution set /proc/sys/net/core/somaxconn value greater 1000.
the default value 128. explains why client experiences increased latency after making 130 connections server.
c linux sockets tcp latency
No comments:
Post a Comment