Skip to content
Snippets Groups Projects
Commit 994d4260 authored by dnsadmin's avatar dnsadmin
Browse files

Timeout dolog van

Kicsit rugalmasabbá kell tenni, de az alap koncepció működik.
parent 74d0441d
Branches
No related tags found
No related merge requests found
......@@ -38,7 +38,7 @@ public:
* @param new_buf New content of the buffer
* @param new_buf_len Length of the new conten in bytes
*/
void set_buf(const char *new_buf, const size_t new_buf_len);
void set_buf(const char *new_buf, const ssize_t new_buf_len);
/**
* @return The length of the current content in the buffer
......
......@@ -169,8 +169,6 @@ int main(int argc, char *argv[])
{
comm_link.send_data("go to hell!");
stop = true;
log_on_demand(LOG_DEBUG, "Raising SIGPIPE");
raise(SIGPIPE);
}
else
comm_link.send_data("nothing has happened");
......
......@@ -41,6 +41,10 @@ IPC_US_communicator::~IPC_US_communicator() {
std::string IPC_US_communicator::recv_data() {
udp_packet_wp data = comm_sock.recvfrom_wp(NULL, NULL);
if(data.get_buf() == 0)
{
// May throw some exception...
}
return data.get_buf();
}
......
......@@ -32,7 +32,14 @@ void udp_packet_wp::set_buf_len(const size_t new_buf_len) {
buf_len = new_buf_len;
}
void udp_packet_wp::set_buf(const char *new_buf, const size_t new_buf_len) {
void udp_packet_wp::set_buf(const char *new_buf, const ssize_t new_buf_len) {
set_buf_len(new_buf_len);
if(new_buf_len <= 0 || new_buf == NULL)
{
memset(buf, 0, MAX_UDP_PACKET_SIZE_BYTES);
}
else
{
memcpy(buf, new_buf, new_buf_len);
}
}
#include <sys/socket.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/time.h>
#include "../include/udp_socket_wp.h"
#include "../include/dns_message.h"
#include "../include/logger.h"
extern logger log_on_demand;
extern bool verbose;
void udp_socket_wp::create_socket(int __domain) {
if(domain < 0 || fd < 0)
......@@ -17,11 +22,16 @@ void udp_socket_wp::create_socket(int __domain) {
{
// May throw some exception...
}
timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
setsockopt_wp(SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
}
void udp_socket_wp::setsockopt_wp(int __level, int __optname, const void* __optval, socklen_t __optlen) {
if (setsockopt(fd, __level, __optname, __optval, __optlen) < 0) {
// May throw some exception
PERROR_ON_DEMAND("setsockopt");
}
}
......@@ -38,9 +48,16 @@ void udp_socket_wp::bind_wp(const general_sockaddr_wp &wrapped_sockaddr) {
udp_packet_wp udp_socket_wp::recvfrom_wp(sockaddr *sender_address, socklen_t* sender_address_len) {
udp_packet_wp msg;
static char buf[MAX_UDP_PACKET_SIZE_BYTES];
size_t len = recvfrom(fd, buf, MAX_UDP_PACKET_SIZE_BYTES, MSG_WAITFORONE,
sender_address, sender_address_len);
ssize_t len;
if((len = recvfrom(fd, buf, MAX_UDP_PACKET_SIZE_BYTES, MSG_WAITFORONE,
sender_address, sender_address_len)) < 0)
{
if(verbose)
PERROR_ON_DEMAND("recvfrom");
msg.set_buf(NULL, 0);
}
// else
// log_on_demand(LOG_DEBUG, "len: %d", len);
msg.set_buf(buf, len);
msg.address.set_sockaddr(sender_address, (sender_address_len != NULL) ? *sender_address_len : 0);
return msg;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment