From ef81a69e7ba3eec3d7d49f281ce246c4f1e02ba6 Mon Sep 17 00:00:00 2001 From: Stéphane Raimbault Date: Fri, 3 May 2013 16:15:43 +0200 Subject: [PATCH] Avoid a level of imbrication in bandwidth-server-many-up --- tests/bandwidth-server-many-up.c | 85 ++++++++++++++++++++++++++++++++++++++++++------------------------------------------- tests/unit-test-client.c | 2 +- 2 files changed, 43 insertions(+), 44 deletions(-) diff --git a/tests/bandwidth-server-many-up.c b/tests/bandwidth-server-many-up.c index dbefffc..a1147f8 100644 --- a/tests/bandwidth-server-many-up.c +++ b/tests/bandwidth-server-many-up.c @@ -49,11 +49,11 @@ static void close_sigint(int dummy) int main(void) { + uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH]; int master_socket; int rc; fd_set refset; fd_set rdset; - /* Maximum file descriptor number */ int fdmax; @@ -91,49 +91,48 @@ int main(void) * read */ for (master_socket = 0; master_socket <= fdmax; master_socket++) { - if (FD_ISSET(master_socket, &rdset)) { - if (master_socket == server_socket) { - /* A client is asking a new connection */ - socklen_t addrlen; - struct sockaddr_in clientaddr; - int newfd; - - /* Handle new connections */ - addrlen = sizeof(clientaddr); - memset(&clientaddr, 0, sizeof(clientaddr)); - newfd = accept(server_socket, (struct sockaddr *)&clientaddr, &addrlen); - if (newfd == -1) { - perror("Server accept() error"); - } else { - FD_SET(newfd, &refset); - - if (newfd > fdmax) { - /* Keep track of the maximum */ - fdmax = newfd; - } - printf("New connection from %s:%d on socket %d\n", - inet_ntoa(clientaddr.sin_addr), clientaddr.sin_port, newfd); - } + if (!FD_ISSET(master_socket, &rdset)) { + continue; + } + + if (master_socket == server_socket) { + /* A client is asking a new connection */ + socklen_t addrlen; + struct sockaddr_in clientaddr; + int newfd; + + /* Handle new connections */ + addrlen = sizeof(clientaddr); + memset(&clientaddr, 0, sizeof(clientaddr)); + newfd = accept(server_socket, (struct sockaddr *)&clientaddr, &addrlen); + if (newfd == -1) { + perror("Server accept() error"); } else { - /* An already connected master has sent a new query */ - uint8_t query[MODBUS_TCP_MAX_ADU_LENGTH]; - - modbus_set_socket(ctx, master_socket); - rc = modbus_receive(ctx, query); - if (rc > 0) { - modbus_reply(ctx, query, rc, mb_mapping); - } else if (rc == -1) { - /* This example server in ended on connection closing or - * any errors. */ - printf("Connection closed on socket %d\n", master_socket); - close(master_socket); - - /* Remove from reference set */ - FD_CLR(master_socket, &refset); - - if (master_socket == fdmax) { - fdmax--; - } + FD_SET(newfd, &refset); + + if (newfd > fdmax) { + /* Keep track of the maximum */ + fdmax = newfd; + } + printf("New connection from %s:%d on socket %d\n", + inet_ntoa(clientaddr.sin_addr), clientaddr.sin_port, newfd); + } + } else { + modbus_set_socket(ctx, master_socket); + rc = modbus_receive(ctx, query); + if (rc > 0) { + modbus_reply(ctx, query, rc, mb_mapping); + } else if (rc == -1) { + /* This example server in ended on connection closing or + * any errors. */ + printf("Connection closed on socket %d\n", master_socket); + close(master_socket); + + /* Remove from reference set */ + FD_CLR(master_socket, &refset); + + if (master_socket == fdmax) { + fdmax--; } } } diff --git a/tests/unit-test-client.c b/tests/unit-test-client.c index da84d20..8b155ad 100644 --- a/tests/unit-test-client.c +++ b/tests/unit-test-client.c @@ -49,7 +49,7 @@ int main(int argc, char *argv[]) if (argc > 1) { if (strcmp(argv[1], "tcp") == 0) { use_backend = TCP; - } else if (strcmp(argv[1], "tcppi") == 0) { + } else if (strcmp(argv[1], "tcppi") == 0) { use_backend = TCP_PI; } else if (strcmp(argv[1], "rtu") == 0) { use_backend = RTU; -- libgit2 0.21.4