Commit ef81a69e7ba3eec3d7d49f281ce246c4f1e02ba6

Authored by Stéphane Raimbault
1 parent 61440f55

Avoid a level of imbrication in bandwidth-server-many-up

tests/bandwidth-server-many-up.c
@@ -49,11 +49,11 @@ static void close_sigint(int dummy) @@ -49,11 +49,11 @@ static void close_sigint(int dummy)
49 49
50 int main(void) 50 int main(void)
51 { 51 {
  52 + uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];
52 int master_socket; 53 int master_socket;
53 int rc; 54 int rc;
54 fd_set refset; 55 fd_set refset;
55 fd_set rdset; 56 fd_set rdset;
56 -  
57 /* Maximum file descriptor number */ 57 /* Maximum file descriptor number */
58 int fdmax; 58 int fdmax;
59 59
@@ -91,49 +91,48 @@ int main(void) @@ -91,49 +91,48 @@ int main(void)
91 * read */ 91 * read */
92 for (master_socket = 0; master_socket <= fdmax; master_socket++) { 92 for (master_socket = 0; master_socket <= fdmax; master_socket++) {
93 93
94 - if (FD_ISSET(master_socket, &rdset)) {  
95 - if (master_socket == server_socket) {  
96 - /* A client is asking a new connection */  
97 - socklen_t addrlen;  
98 - struct sockaddr_in clientaddr;  
99 - int newfd;  
100 -  
101 - /* Handle new connections */  
102 - addrlen = sizeof(clientaddr);  
103 - memset(&clientaddr, 0, sizeof(clientaddr));  
104 - newfd = accept(server_socket, (struct sockaddr *)&clientaddr, &addrlen);  
105 - if (newfd == -1) {  
106 - perror("Server accept() error");  
107 - } else {  
108 - FD_SET(newfd, &refset);  
109 -  
110 - if (newfd > fdmax) {  
111 - /* Keep track of the maximum */  
112 - fdmax = newfd;  
113 - }  
114 - printf("New connection from %s:%d on socket %d\n",  
115 - inet_ntoa(clientaddr.sin_addr), clientaddr.sin_port, newfd);  
116 - } 94 + if (!FD_ISSET(master_socket, &rdset)) {
  95 + continue;
  96 + }
  97 +
  98 + if (master_socket == server_socket) {
  99 + /* A client is asking a new connection */
  100 + socklen_t addrlen;
  101 + struct sockaddr_in clientaddr;
  102 + int newfd;
  103 +
  104 + /* Handle new connections */
  105 + addrlen = sizeof(clientaddr);
  106 + memset(&clientaddr, 0, sizeof(clientaddr));
  107 + newfd = accept(server_socket, (struct sockaddr *)&clientaddr, &addrlen);
  108 + if (newfd == -1) {
  109 + perror("Server accept() error");
117 } else { 110 } else {
118 - /* An already connected master has sent a new query */  
119 - uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];  
120 -  
121 - modbus_set_socket(ctx, master_socket);  
122 - rc = modbus_receive(ctx, query);  
123 - if (rc > 0) {  
124 - modbus_reply(ctx, query, rc, mb_mapping);  
125 - } else if (rc == -1) {  
126 - /* This example server in ended on connection closing or  
127 - * any errors. */  
128 - printf("Connection closed on socket %d\n", master_socket);  
129 - close(master_socket);  
130 -  
131 - /* Remove from reference set */  
132 - FD_CLR(master_socket, &refset);  
133 -  
134 - if (master_socket == fdmax) {  
135 - fdmax--;  
136 - } 111 + FD_SET(newfd, &refset);
  112 +
  113 + if (newfd > fdmax) {
  114 + /* Keep track of the maximum */
  115 + fdmax = newfd;
  116 + }
  117 + printf("New connection from %s:%d on socket %d\n",
  118 + inet_ntoa(clientaddr.sin_addr), clientaddr.sin_port, newfd);
  119 + }
  120 + } else {
  121 + modbus_set_socket(ctx, master_socket);
  122 + rc = modbus_receive(ctx, query);
  123 + if (rc > 0) {
  124 + modbus_reply(ctx, query, rc, mb_mapping);
  125 + } else if (rc == -1) {
  126 + /* This example server in ended on connection closing or
  127 + * any errors. */
  128 + printf("Connection closed on socket %d\n", master_socket);
  129 + close(master_socket);
  130 +
  131 + /* Remove from reference set */
  132 + FD_CLR(master_socket, &refset);
  133 +
  134 + if (master_socket == fdmax) {
  135 + fdmax--;
137 } 136 }
138 } 137 }
139 } 138 }
tests/unit-test-client.c
@@ -49,7 +49,7 @@ int main(int argc, char *argv[]) @@ -49,7 +49,7 @@ int main(int argc, char *argv[])
49 if (argc > 1) { 49 if (argc > 1) {
50 if (strcmp(argv[1], "tcp") == 0) { 50 if (strcmp(argv[1], "tcp") == 0) {
51 use_backend = TCP; 51 use_backend = TCP;
52 - } else if (strcmp(argv[1], "tcppi") == 0) { 52 + } else if (strcmp(argv[1], "tcppi") == 0) {
53 use_backend = TCP_PI; 53 use_backend = TCP_PI;
54 } else if (strcmp(argv[1], "rtu") == 0) { 54 } else if (strcmp(argv[1], "rtu") == 0) {
55 use_backend = RTU; 55 use_backend = RTU;