initial fixing

This commit is contained in:
Erik Frojdh 2020-02-04 17:34:07 +01:00
parent 94fcf52e64
commit 8f64449117
3 changed files with 84 additions and 1 deletions

View File

@ -18,4 +18,18 @@ target_link_libraries(result
set_target_properties(result PROPERTIES set_target_properties(result PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
) )
add_executable(udp udp.cpp)
target_link_libraries(udp
slsDetectorShared
slsSupportLib
pthread
rt
)
set_target_properties(udp PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
)

13
sample/udp.cpp Normal file
View File

@ -0,0 +1,13 @@
#include "UdpSocket.h"
#include <iostream>
#include <chrono>
#include <thread>
int main(){
std::cout << "HEJ\n";
sls::UdpSocket s(50010, 1024);
while(true){
std::cout << "Got: " << s.ReceivePacket() << " bytes\n";
std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
}

View File

@ -0,0 +1,56 @@
#include <cstdint>
#include <errno.h>
#include <iostream>
#include <netdb.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
#include "sls_detector_exceptions.h"
namespace sls {
class UdpSocket {
int port;
size_t packet_size;
size_t buffer_size;
int fd = -1;
public:
UdpSocket(int port, size_t packet_size)
: port(port), packet_size(packet_size) {
const char *hostname = 0; /* wildcard */
const std::string portname = std::to_string(port);
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_protocol = 0;
hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
struct addrinfo *res = 0;
if (getaddrinfo(hostname, portname.c_str(), &hints, &res)){
throw RuntimeError("Failed getaddinfo");
}
fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if(fd==-1){
throw RuntimeError("Failed creating socket");
}
if (bind(fd, res->ai_addr, res->ai_addrlen) == -1) {
throw RuntimeError("Failed to bind socket");
}
freeaddrinfo(res);
}
int ReceivePacket() {
char buffer[549];
struct sockaddr_storage src_addr;
socklen_t src_addr_len = sizeof(src_addr);
ssize_t count = recvfrom(fd, buffer, sizeof(buffer), 0,
(struct sockaddr *)&src_addr, &src_addr_len);
return count;
}
};
} // namespace sls