Skip to content

Commit

Permalink
[UDP] set send buff (avoid copying before sending) and format code (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
dewagter committed Nov 8, 2017
1 parent 8a584c2 commit 0196480
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 6 deletions.
27 changes: 23 additions & 4 deletions sw/airborne/arch/linux/udp_socket.c
Expand Up @@ -145,7 +145,7 @@ int udp_socket_send_dontwait(struct UdpSocket *sock, uint8_t *buffer, uint32_t l
}

ssize_t bytes_sent = sendto(sock->sockfd, buffer, len, MSG_DONTWAIT,
(struct sockaddr *)&sock->addr_out, sizeof(sock->addr_out));
(struct sockaddr *)&sock->addr_out, sizeof(sock->addr_out));
return bytes_sent;
}

Expand Down Expand Up @@ -191,7 +191,8 @@ int udp_socket_recv(struct UdpSocket *sock, uint8_t *buffer, uint32_t len)
return (int)bytes_read;
}

int udp_socket_subscribe_multicast(struct UdpSocket *sock, const char* multicast_addr) {
int udp_socket_subscribe_multicast(struct UdpSocket *sock, const char *multicast_addr)
{
// Create the request
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr(multicast_addr);
Expand All @@ -201,15 +202,33 @@ int udp_socket_subscribe_multicast(struct UdpSocket *sock, const char* multicast
return setsockopt(sock->sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mreq, sizeof(mreq));
}

int udp_socket_set_recvbuf(struct UdpSocket *sock, int buf_size) {
int udp_socket_set_recvbuf(struct UdpSocket *sock, int buf_size)
{
// Set and check
unsigned int optval_size = 4;
int buf_ret;
setsockopt(sock->sockfd, SOL_SOCKET, SO_RCVBUF, (char *)&buf_size, optval_size);
getsockopt(sock->sockfd, SOL_SOCKET, SO_RCVBUF, (char *)&buf_ret, &optval_size);

if(buf_size != buf_ret)
if (buf_size != buf_ret) {
return -1;
}

return 0;
}

int udp_socket_set_sendbuf(struct UdpSocket *sock, int buf_size)
{
// Set and check
unsigned int optval_size = 4;
int buf_ret;
setsockopt(sock->sockfd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, optval_size);
getsockopt(sock->sockfd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_ret, &optval_size);

if (buf_size != buf_ret) {
return -1;
}

return 0;
}

4 changes: 2 additions & 2 deletions sw/airborne/arch/linux/udp_socket.h
Expand Up @@ -84,7 +84,7 @@ extern int udp_socket_recv_dontwait(struct UdpSocket *sock, uint8_t *buffer, uin
*/
extern int udp_socket_recv(struct UdpSocket *sock, uint8_t *buffer, uint32_t len);

extern int udp_socket_subscribe_multicast(struct UdpSocket *sock, const char* multicast_addr);
extern int udp_socket_subscribe_multicast(struct UdpSocket *sock, const char *multicast_addr);
extern int udp_socket_set_recvbuf(struct UdpSocket *sock, int buf_size);

extern int udp_socket_set_sendbuf(struct UdpSocket *sock, int buf_size);
#endif /* UDP_SOCKET_H */

0 comments on commit 0196480

Please sign in to comment.