mirror of https://github.com/ArduPilot/ardupilot
AP_HAL: added sendto socket method
This commit is contained in:
parent
4e117bc90f
commit
9336914598
|
@ -19,15 +19,6 @@
|
||||||
#include <AP_HAL.h>
|
#include <AP_HAL.h>
|
||||||
#if HAL_OS_SOCKETS
|
#if HAL_OS_SOCKETS
|
||||||
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <netinet/tcp.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <sys/select.h>
|
|
||||||
|
|
||||||
#include "Socket.h"
|
#include "Socket.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -42,12 +33,8 @@ datagram(_datagram)
|
||||||
setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one));
|
setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &one, sizeof(one));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
void SocketAPM::make_sockaddr(const char *address, uint16_t port, struct sockaddr_in &sockaddr)
|
||||||
connect the socket
|
|
||||||
*/
|
|
||||||
bool SocketAPM::connect(const char *address, uint16_t port)
|
|
||||||
{
|
{
|
||||||
struct sockaddr_in sockaddr;
|
|
||||||
memset(&sockaddr, 0, sizeof(sockaddr));
|
memset(&sockaddr, 0, sizeof(sockaddr));
|
||||||
|
|
||||||
#ifdef HAVE_SOCK_SIN_LEN
|
#ifdef HAVE_SOCK_SIN_LEN
|
||||||
|
@ -56,6 +43,15 @@ bool SocketAPM::connect(const char *address, uint16_t port)
|
||||||
sockaddr.sin_port = htons(port);
|
sockaddr.sin_port = htons(port);
|
||||||
sockaddr.sin_family = AF_INET;
|
sockaddr.sin_family = AF_INET;
|
||||||
sockaddr.sin_addr.s_addr = inet_addr(address);
|
sockaddr.sin_addr.s_addr = inet_addr(address);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
connect the socket
|
||||||
|
*/
|
||||||
|
bool SocketAPM::connect(const char *address, uint16_t port)
|
||||||
|
{
|
||||||
|
struct sockaddr_in sockaddr;
|
||||||
|
make_sockaddr(address, port, sockaddr);
|
||||||
|
|
||||||
if (::connect(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) != 0) {
|
if (::connect(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) != 0) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -69,14 +65,7 @@ bool SocketAPM::connect(const char *address, uint16_t port)
|
||||||
bool SocketAPM::bind(const char *address, uint16_t port)
|
bool SocketAPM::bind(const char *address, uint16_t port)
|
||||||
{
|
{
|
||||||
struct sockaddr_in sockaddr;
|
struct sockaddr_in sockaddr;
|
||||||
memset(&sockaddr, 0, sizeof(sockaddr));
|
make_sockaddr(address, port, sockaddr);
|
||||||
|
|
||||||
#ifdef HAVE_SOCK_SIN_LEN
|
|
||||||
sockaddr.sin_len = sizeof(sockaddr);
|
|
||||||
#endif
|
|
||||||
sockaddr.sin_port = htons(port);
|
|
||||||
sockaddr.sin_family = AF_INET;
|
|
||||||
sockaddr.sin_addr.s_addr = inet_addr(address);
|
|
||||||
|
|
||||||
if (::bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) != 0) {
|
if (::bind(fd, (struct sockaddr *)&sockaddr, sizeof(sockaddr)) != 0) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -114,6 +103,16 @@ ssize_t SocketAPM::send(void *buf, size_t size)
|
||||||
return ::send(fd, buf, size, 0);
|
return ::send(fd, buf, size, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
send some data
|
||||||
|
*/
|
||||||
|
ssize_t SocketAPM::sendto(void *buf, size_t size, const char *address, uint16_t port)
|
||||||
|
{
|
||||||
|
struct sockaddr_in sockaddr;
|
||||||
|
make_sockaddr(address, port, sockaddr);
|
||||||
|
return ::sendto(fd, buf, size, 0, (struct sockaddr *)&sockaddr, sizeof(sockaddr));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
receive some data
|
receive some data
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -22,7 +22,14 @@
|
||||||
#include <AP_HAL.h>
|
#include <AP_HAL.h>
|
||||||
#if HAL_OS_SOCKETS
|
#if HAL_OS_SOCKETS
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/tcp.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <sys/select.h>
|
||||||
|
|
||||||
class SocketAPM {
|
class SocketAPM {
|
||||||
public:
|
public:
|
||||||
|
@ -33,11 +40,14 @@ public:
|
||||||
void set_blocking(bool blocking);
|
void set_blocking(bool blocking);
|
||||||
|
|
||||||
ssize_t send(void *pkt, size_t size);
|
ssize_t send(void *pkt, size_t size);
|
||||||
|
ssize_t sendto(void *buf, size_t size, const char *address, uint16_t port);
|
||||||
ssize_t recv(void *pkt, size_t size, uint32_t timeout_ms);
|
ssize_t recv(void *pkt, size_t size, uint32_t timeout_ms);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool datagram;
|
bool datagram;
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
|
void make_sockaddr(const char *address, uint16_t port, struct sockaddr_in &sockaddr);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // HAL_OS_SOCKETS
|
#endif // HAL_OS_SOCKETS
|
||||||
|
|
Loading…
Reference in New Issue