From 665b8c80687a53e3eb2bcefa04d0f988bc128404 Mon Sep 17 00:00:00 2001 From: hadaq Date: Fri, 8 Jun 2012 19:17:25 +0000 Subject: [PATCH] update --- libtrbnet/trberror.c | 7 ++++--- libtrbnet/trberror.h | 3 ++- libtrbnet/trbnet.c | 23 +++++++++++++++++++---- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/libtrbnet/trberror.c b/libtrbnet/trberror.c index 2b5d460..017b19a 100644 --- a/libtrbnet/trberror.c +++ b/libtrbnet/trberror.c @@ -6,7 +6,7 @@ #include "trberror.h" /* Error Handling */ - +#define NUM_ERRORS 39 int trb_errno = TRB_NONE; TRB_TERM trb_term = {0, 0, 0, 0}; @@ -90,10 +90,11 @@ const char* trb_errorstr(int trberrno) "Pexor Device Error ioctl call, Lost Credential(s)", "Pexor Device Error ioctl call, FIFO Transfer Error", "Command is not supported by TRB3", - "TRB3 Socket Error" + "TRB3 Socket Error", + "TRB3 Socket Timeout" }; - if (trberrno < 38) { + if (trberrno < NUM_ERRORS) { return errorstring[trberrno]; } if (trberrno >= 256) { diff --git a/libtrbnet/trberror.h b/libtrbnet/trberror.h index dde90c3..1acb866 100644 --- a/libtrbnet/trberror.h +++ b/libtrbnet/trberror.h @@ -45,7 +45,8 @@ typedef enum { TRB_PEXOR_DEVICE_LOST_CREDENTIAL = 34, TRB_PEXOR_DEVICE_FIFO_TRANSFER = 35, TRB_TRB3_CMD_NOT_SUPPORTED = 36, - TRB_TRB3_SOCKET_ERROR = 37 + TRB_TRB3_SOCKET_ERROR = 37, + TRB_TRB3_SOCKET_TIMEOUT = 38 } TRB_ERROR; /* last TRBNet-TermPackage */ diff --git a/libtrbnet/trbnet.c b/libtrbnet/trbnet.c index 752c2eb..44165ca 100644 --- a/libtrbnet/trbnet.c +++ b/libtrbnet/trbnet.c @@ -1,4 +1,4 @@ -const char trbnet_version[] = "$Revision: 4.22 $ Local"; +const char trbnet_version[] = "$Revision: 4.23 $ Local"; #include #include @@ -380,7 +380,9 @@ static int getUDPPackage() /* GetData */ status = recv(trb3_sockfd_in, (void*)dataBuffer, 1500, 0); if (status == -1) { - trb_errno = TRB_TRB3_SOCKET_ERROR; + trb_errno = errno == EAGAIN + ? TRB_TRB3_SOCKET_TIMEOUT + : TRB_TRB3_SOCKET_ERROR; return -1; } dataBufferSize = status / 2; @@ -407,6 +409,9 @@ static int sendTrbPackage(size_t size) /* Adjust endianess ... */ for (i = 0; i < size; i++) { if (trb_debug > 2) { + if (i == 0) { + fprintf(stderr, "udp sent:\n"); + } fprintf(stderr, "%d 0x%04x\n", i, udpBuffer[i]); } udpBuffer[i] = htons(udpBuffer[i]); @@ -1240,8 +1245,10 @@ int trb_fifo_read(uint8_t channel, if (getUDPPackage() <= 0) { return -1; } - } - tmp = dataBuffer; + tmp = dataBuffer; + } else { + tmp++; + } #endif } /* end while () */ @@ -1521,6 +1528,7 @@ int init_ports() struct sockaddr_in sender_addr; struct sockaddr_in receiver_addr; struct hostent* host = NULL; + struct timeval tv; trb_errno = TRB_NONE; @@ -1565,6 +1573,13 @@ int init_ports() trb_errno = TRB_TRB3_SOCKET_ERROR; return -1; } + + /* Set Socket Timepout */ + tv.tv_sec = 10; /* 30 Secs Timeout */ + tv.tv_usec = 0; // Not init'ing this can cause strange errors + setsockopt(trb3_sockfd_in, SOL_SOCKET, SO_RCVTIMEO, + (char *)&tv,sizeof(struct timeval)); + receiver_addr.sin_family = AF_INET; receiver_addr.sin_port = htons(trb3_port); receiver_addr.sin_addr.s_addr = htonl(INADDR_ANY); -- 2.43.0