* \brief Clears any data in the read buffer of the socket * * \param rp Port data structure */
| 422 | * \param rp Port data structure |
| 423 | */ |
| 424 | void network_flush(hamlib_port_t *rp) |
| 425 | { |
| 426 | #ifdef __MINGW32__ |
| 427 | ULONG len; |
| 428 | #else |
| 429 | uint len; |
| 430 | #endif |
| 431 | |
| 432 | char buffer[NET_BUFFER_SIZE] = { 0 }; |
| 433 | |
| 434 | rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); |
| 435 | |
| 436 | for (;;) |
| 437 | { |
| 438 | int ret; |
| 439 | len = 0; |
| 440 | #ifdef __MINGW32__ |
| 441 | ret = ioctlsocket(rp->fd, FIONREAD, &len); |
| 442 | #else |
| 443 | ret = ioctl(rp->fd, FIONREAD, &len); |
| 444 | #endif |
| 445 | |
| 446 | if (ret != 0) |
| 447 | { |
| 448 | rig_debug(RIG_DEBUG_ERR, "%s: ioctl err '%s'\n", __func__, strerror(errno)); |
| 449 | break; |
| 450 | } |
| 451 | |
| 452 | if (len > 0) |
| 453 | { |
| 454 | int len_read = 0; |
| 455 | rig_debug(RIG_DEBUG_WARN, |
| 456 | "%s: network data clear d: ret=%d, len=%d, '%s'\n", |
| 457 | __func__, |
| 458 | ret, (int)len, buffer); |
| 459 | len_read = recv(rp->fd, buffer, len < NET_BUFFER_SIZE ? len : NET_BUFFER_SIZE, |
| 460 | 0); |
| 461 | |
| 462 | if (len_read < 0) // -1 indicates error occurred |
| 463 | { |
| 464 | rig_debug(RIG_DEBUG_ERR, "%s: read error '%s'\n", __func__, strerror(errno)); |
| 465 | break; |
| 466 | } |
| 467 | |
| 468 | rig_debug(RIG_DEBUG_WARN, |
| 469 | "%s: network data cleared: ret=%d, len_read=%d/0x%x\n", |
| 470 | __func__, |
| 471 | ret, len_read, len_read); |
| 472 | dump_hex((unsigned char *)buffer, len_read); |
| 473 | } |
| 474 | else |
| 475 | { |
| 476 | break; |
| 477 | } |
| 478 | } |
| 479 | } |
| 480 | |
| 481 |
no test coverage detected