#16 add read with sockaddr_storage

pull/32/head
Geoffrey Merck 4 years ago
parent 708341e917
commit 3d4eda60ac

10
.vscode/tasks.json vendored

@ -12,7 +12,10 @@
"ENABLE_DEBUG=1", "ENABLE_DEBUG=1",
"USE_GPSD=1" "USE_GPSD=1"
], ],
"group": "build", "group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [] "problemMatcher": []
}, },
{ {
@ -25,10 +28,7 @@
"ENABLE_DEBUG=1", "ENABLE_DEBUG=1",
"USE_GPSD=1" "USE_GPSD=1"
], ],
"group": { "group": "build",
"kind": "build",
"isDefault": true
},
"problemMatcher": [] "problemMatcher": []
} }
] ]

@ -101,7 +101,7 @@ bool CUDPReaderWriter::open()
return true; return true;
} }
int CUDPReaderWriter::read(unsigned char* buffer, unsigned int length, in_addr& address, unsigned int& port) int CUDPReaderWriter::read(unsigned char* buffer, unsigned int length, struct sockaddr_storage& addr)
{ {
// Check that the readfrom() won't block // Check that the readfrom() won't block
fd_set readFds; fd_set readFds;
@ -122,8 +122,7 @@ int CUDPReaderWriter::read(unsigned char* buffer, unsigned int length, in_addr&
if (ret == 0) if (ret == 0)
return 0; return 0;
sockaddr_in addr; socklen_t size = sizeof(addr);
socklen_t size = sizeof(sockaddr_in);
ssize_t len = ::recvfrom(m_fd, (char*)buffer, length, 0, (sockaddr *)&addr, &size); ssize_t len = ::recvfrom(m_fd, (char*)buffer, length, 0, (sockaddr *)&addr, &size);
if (len <= 0) { if (len <= 0) {
@ -131,12 +130,22 @@ int CUDPReaderWriter::read(unsigned char* buffer, unsigned int length, in_addr&
return -1; return -1;
} }
address = addr.sin_addr;
port = ntohs(addr.sin_port);
return len; return len;
} }
int CUDPReaderWriter::read(unsigned char* buffer, unsigned int length, in_addr& address, unsigned int& port)
{
struct sockaddr_storage addr;
auto res = read(buffer, length, addr);
if(res >= 0 && addr.ss_family == AF_INET) {
address = ((struct sockaddr_in*)&addr)->sin_addr;
port = ntohs(((struct sockaddr_in*)&addr)->sin_port);
}
return res;
}
bool CUDPReaderWriter::write(const unsigned char* buffer, unsigned int length, const in_addr& address, unsigned int port) bool CUDPReaderWriter::write(const unsigned char* buffer, unsigned int length, const in_addr& address, unsigned int port)
{ {
sockaddr_in addr; sockaddr_in addr;

@ -41,7 +41,8 @@ public:
bool open(); bool open();
int read(unsigned char* buffer, unsigned int length, in_addr& address, unsigned int& port); int read(unsigned char* buffer, unsigned int length, struct sockaddr_storage& addr);
int read(unsigned char* buffer, unsigned int length, in_addr& address, unsigned int& port);
bool write(const unsigned char* buffer, unsigned int length, const in_addr& address, unsigned int port); bool write(const unsigned char* buffer, unsigned int length, const in_addr& address, unsigned int port);
void close(); void close();

Loading…
Cancel
Save

Powered by TurnKey Linux.