From: Jörn Adamczewski-Musch Date: Wed, 12 Aug 2026 11:15:42 +0000 (+0200) Subject: added improvements suggested by llmbot.gsi.de (qwen3.6) X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=e505a4e6ddd01d8b08ab1a004ce7b0a9be6c1c40;p=trbnettools.git added improvements suggested by llmbot.gsi.de (qwen3.6) to be tested still --- diff --git a/libtrbnet/trbnet.c b/libtrbnet/trbnet.c index d2bcacd..b24c0c3 100644 --- a/libtrbnet/trbnet.c +++ b/libtrbnet/trbnet.c @@ -27,6 +27,7 @@ const char trbnet_version[] = "Revision " TRBNET_VERSION " UNKNOWN, i.e. ERROR"; //#define TRB_DEBUGGER 1 +//#define TRB3 1 /* Used by trb_register_modify and trb_nettrace */ #define TMP_DATA_SIZE (1024 * 2) @@ -446,13 +447,16 @@ static int getUDPPackage() static uint16_t dataBufferTemp[32768 * 2]; // temporary buffer for multi-packet responses // gk this fragment rewritten to support multi-packet responses - while(1) { + const unsigned int udp_max_packets = 64; + while(pkt_nr < udp_max_packets) { // JAM2026: moved this inside receiver loop FD_ZERO(&fds); FD_SET(trb3_sockfd, &fds); - status = pselect(trb3_sockfd + 1, &fds, NULL, NULL, &tv, NULL); + // Use shorter timeout after first packet to avoid accumulating excessive delays + const struct timespec recv_timeout = { .tv_sec = 2, .tv_nsec = 0 }; + status = pselect(trb3_sockfd + 1, &fds, NULL, NULL, pkt_nr == 0 ? &tv : &recv_timeout, NULL); if (status == -1) { trb_errno = TRB_TRB3_SOCKET_ERROR; return -1; @@ -462,16 +466,12 @@ static int getUDPPackage() return -1; } - /////////////////////////////////////// - - status = recvfrom(trb3_sockfd, (void*)dataBufferTemp, - 65536, - //MSG_DONTWAIT, - MSG_WAITALL, //MSG_DONTWAIT, + sizeof(dataBufferTemp), + 0, (struct sockaddr*)&in_addr, &in_addr_len); @@ -558,7 +558,193 @@ static int getUDPPackage() //fprintf(stderr, "trb3_udp_version %d\n", trb3_udp_version); break; } - } + } + + // Check if we hit the packet limit without receiving a terminator + if (pkt_nr >= udp_max_packets) { + if (trb_debug > 1) { + fprintf(stderr, "getUDPPackage: max packet count (%u) exceeded\n", udp_max_packets); + } + trb_errno = TRB_TRB3_DATA_ERROR; + return -1; + } + + +///////////// JAM 30-06-26: below artefact from qwen3.6 of llmbot.gsi.de +// return dataBufferSize * 2; +//} +//{ +// struct sockaddr_in in_addr; +// socklen_t in_addr_len = sizeof(struct sockaddr_in); +// fd_set fds; /* used by select call */ +// int status; +// int i; +// +// dataBufferSize = 0; +// +// /* GetData */ +// if (trb_debug > 2) { +// fprintf(stderr, "Wait UDP Data\n"); +// } +// +// /* Wait for data ready and Set Socket Timeout */ +//// FD_ZERO(&fds); +//// FD_SET(trb3_sockfd, &fds); +//// +//// status = pselect(trb3_sockfd + 1, &fds, NULL, NULL, &tv, NULL); +//// if (status == -1) { +//// trb_errno = TRB_TRB3_SOCKET_ERROR; +//// return -1; +//// } +//// if (FD_ISSET(trb3_sockfd, &fds) == 0) { +//// trb_errno = TRB_TRB3_SOCKET_TIMEOUT; +//// return -1; +//// } +/////// JAM2026: moved down into while loop +// +// /* Read Data */ +// +// uint8_t command_index_type = 2; +// uint8_t command_index_ret; +// +// dataBufferSize = 0; +// +// uint8_t pkt_nr = 0; +// +// static uint16_t dataBufferTemp[32768 * 2]; // temporary buffer for multi-packet responses +// +//// gk this fragment rewritten to support multi-packet responses +// const unsigned int udp_max_packets = 64; +// while(pkt_nr < udp_max_packets) { +// +// // JAM2026: moved this inside receiver loop +// FD_ZERO(&fds); +// FD_SET(trb3_sockfd, &fds); +// +// status = pselect(trb3_sockfd + 1, &fds, NULL, NULL, &tv, NULL); +// if (status == -1) { +// trb_errno = TRB_TRB3_SOCKET_ERROR; +// return -1; +// } +// if (FD_ISSET(trb3_sockfd, &fds) == 0) { +// trb_errno = TRB_TRB3_SOCKET_TIMEOUT; +// return -1; +// } +// +// /////////////////////////////////////// +// +// +// +// +// status = recvfrom(trb3_sockfd, +// (void*)dataBufferTemp, +// sizeof(dataBufferTemp), +// 0, +// (struct sockaddr*)&in_addr, +// &in_addr_len); +// +// if (status == -1) { +// if (trb_debug > 2) +// fprintf(stderr, "Received %d bytes\n", status); +// (void*)dataBufferTemp, +// sizeof(dataBufferTemp), +// 0, +// (struct sockaddr*)&in_addr, +// &in_addr_len); +// (void*)dataBufferTemp, +// 65536, +// //MSG_DONTWAIT, +// MSG_WAITALL, //MSG_DONTWAIT, +// (struct sockaddr*)&in_addr, +// &in_addr_len); +// +// if (trb_debug > 2) +// fprintf(stderr, "Received %d bytes\n", status); +// +// if (status == -1) { +// trb_errno = TRB_TRB3_SOCKET_ERROR; +// return -1; +// } +// +// if (trb_debug > 2) { +// fprintf(stderr, "udp received: %d\n", status); +// } +// +// //JAM26 debug: +// //fprintf(stderr, "dataBufferSize %d status %d pkt_nr %d\n", dataBufferSize, status, pkt_nr); +// +// //for (i = 0; i < status / 2; i+= 2) +// // for (i = 0; i < 40; i+= 2) +// // fprintf(stdout, "%d: %04x %04x\n", i, (unsigned int) dataBufferTemp[i], (unsigned int) dataBufferTemp[i+1]); +// +// // workaround for minimal successive packet +// //if (pkt_nr > 1 && status == 12) { +// // dataBufferSize -= 1; +// //} +// +// +// /* Adjust endianess ... */ +// for (i = 0; i < (status - (pkt_nr == 0 ? 0 : 2)) / 2; i++) { +// dataBufferR[dataBufferSize + i] = ntohs(dataBufferTemp[i + (pkt_nr == 0 ? 0 : 1)]); +// if (trb_debug > 2) { +// fprintf(stderr, "%d 0x%04x\n", i, dataBufferR[i]); +// } +// } +// +// dataBufferSize += status / 2 - (pkt_nr == 0 ? 0 : 1); + + +// /* Check returned udp_command_index */ +// if (trb3_udp_version == 2) { +// command_index_type = (uint8_t)(dataBufferTemp[0] & 0x00ff); +// command_index_ret = (uint8_t)(dataBufferTemp[0] >> 8); +// +// //fprintf(stderr, "index_type %d index_ret %d %d\n", command_index_type, command_index_ret, udp_command_index); +// +// if (command_index_type != 2 && command_index_type != 3 && command_index_type != 4) { +// if (trb_debug > 1) { +// fprintf(stderr, "getUDPPackage: invalid command_index_type: %d\n", +// command_index_type); +// } +// trb_errno = TRB_TRB3_INVALID_UDP_HEADER; +// fprintf(stderr, "exiting because of the command type"); +// return -1; +// } +// +// /*if (command_index_ret != udp_command_index) { +// if (trb_debug > 1) { +// fprintf(stderr, +// "getUDPPackage: invalid : udp_command_index: " +// "0x%02x != 0x%02x\n", +// command_index_ret, udp_command_index); +// } +// trb_errno = TRB_TRB3_INVALID_UDP_HEADER; +// return -1; +// }*/ +// +// +// if (command_index_type == 2) { +// //fprintf(stderr, "getUDPPackage: received standard packet\n"); +// break; +// } +// else if (command_index_type == 3) { +// //fprintf(stderr, "getUDPPackage: received multi-packet flag\n"); +// pkt_nr++; +// } +// else if (command_index_type == 4) { +// //fprintf(stderr, "getUDPPackage: received end-of-response flag\n"); +// break; +// } +// +// } +// else { +// //fprintf(stderr, "trb3_udp_version %d\n", trb3_udp_version); +// break; +// } +// } + +///////////// JAM 30-06-26: end artefact from qwen3.6 of llmbot.gsi.de + //fprintf(stdout, "Total size: %d\n", dataBufferSize); // for (i = 0; i < dataBufferSize; i+=2)