From 830dad87525133a90beddf93a621095d0e856806 Mon Sep 17 00:00:00 2001 From: skarg Date: Thu, 5 May 2005 18:16:34 +0000 Subject: [PATCH] corrected API for sending to return the number of bytes sent. --- bacnet-stack/ports/rtos32/bip.c | 26 ++++++-------------------- 1 file changed, 6 insertions(+), 20 deletions(-) diff --git a/bacnet-stack/ports/rtos32/bip.c b/bacnet-stack/ports/rtos32/bip.c index 5cda6f97..56d50586 100644 --- a/bacnet-stack/ports/rtos32/bip.c +++ b/bacnet-stack/ports/rtos32/bip.c @@ -126,37 +126,25 @@ bool bip_init(void) return true; } -/* function to send a packet out the 802.2 socket */ -/* returns 0 on success, non-zero on failure */ +/* function to send a packet out the BACnet/IP socket (Annex J) */ +/* returns number of bytes sent on success, negative number on failure */ static int bip_send( struct sockaddr_in *bip_dest, uint8_t *pdu, // any data to be sent - may be null unsigned pdu_len) // number of bytes of data { - int status = -1; /* initially fail status */ int bytes = 0; int bip_send_socket = -1; uint8_t mtu[MAX_MPDU] = { 0 }; int mtu_len = 0; int i = 0; - int rv = 0; /* return value from socket calls */ // assumes that the driver has already been initialized // FIXME: can we use the same socket over and over? // FIXME: can we use the same socket as receive bip? bip_send_socket = socket(AF_INET, SOCK_DGRAM, 0); if (bip_send_socket < 0) - return status; - - /* UDP is connection based */ - rv = connect(bip_send_socket, - (const struct sockaddr*)bip_dest, - sizeof(struct sockaddr)); - if (bip_send_socket < 0) - { - close(bip_send_socket); - return status; - } + return bip_send_socket; mtu[0] = 0x81; /* BVLL for BACnet/IP */ if (bip_dest->sin_addr.s_addr == BIP_Broadcast_Address.s_addr) @@ -169,19 +157,17 @@ static int bip_send( mtu_len += pdu_len; /* Send the packet */ - rv = sendto(bip_send_socket, (char *)mtu, mtu_len, 0, + bytes = sendto(bip_send_socket, (char *)mtu, mtu_len, 0, (struct sockaddr *)bip_dest, sizeof(struct sockaddr)); - if (rv >= 0) - status = 0; close(bip_send_socket); - return status; + return bytes; } /* function to send a packet out the BACnet/IP socket (Annex J) */ -/* returns zero on success, non-zero on failure */ +/* returns number of bytes sent on success, negative number on failure */ int bip_send_pdu( BACNET_ADDRESS *dest, // destination address uint8_t *pdu, // any data to be sent - may be null