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 49  
50 50 int main(void)
51 51 {
  52 + uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH];
52 53 int master_socket;
53 54 int rc;
54 55 fd_set refset;
55 56 fd_set rdset;
56   -
57 57 /* Maximum file descriptor number */
58 58 int fdmax;
59 59  
... ... @@ -91,49 +91,48 @@ int main(void)
91 91 * read */
92 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 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 49 if (argc > 1) {
50 50 if (strcmp(argv[1], "tcp") == 0) {
51 51 use_backend = TCP;
52   - } else if (strcmp(argv[1], "tcppi") == 0) {
  52 + } else if (strcmp(argv[1], "tcppi") == 0) {
53 53 use_backend = TCP_PI;
54 54 } else if (strcmp(argv[1], "rtu") == 0) {
55 55 use_backend = RTU;
... ...