Added additional logging on system calls and ensured that an error message rather than an error code is returned for easier debugging

This commit is contained in:
John Sharratt 2017-07-02 15:53:35 +02:00
parent 0fd1dc0308
commit f2d5804959
2 changed files with 19 additions and 14 deletions

View File

@ -319,8 +319,7 @@ ssize_t iface::read(int fd, struct sockaddr* saddr, uint8_t* msg, size_t size)
if ((len = recvmsg(fd,& mhdr, 0)) < 0) if ((len = recvmsg(fd,& mhdr, 0)) < 0)
{ {
int e = errno; logger::error() << "iface::read() failed! error=" << logger::err() << ", ifa=" << name();
logger::error() << "iface::read() failed! errno=" << e << ", ifa=" << name();
return -1; return -1;
} }
@ -357,8 +356,7 @@ ssize_t iface::write(int fd, const address& daddr, const uint8_t* msg, size_t si
if ((len = sendmsg(fd,& mhdr, 0)) < 0) if ((len = sendmsg(fd,& mhdr, 0)) < 0)
{ {
int e = errno; logger::error() << "iface::write() failed! error=" << logger::err() << ", ifa=" << name() << ", daddr=" << daddr.to_string();
logger::error() << "iface::write() failed! errno=" << e << ", ifa=" << name() << ", daddr=" << daddr.to_string();
return -1; return -1;
} }
@ -371,8 +369,10 @@ ssize_t iface::read_solicit(address& saddr, address& daddr, address& taddr)
uint8_t msg[256]; uint8_t msg[256];
ssize_t len; ssize_t len;
if ((len = read(_pfd, (struct sockaddr*)&t_saddr, msg, sizeof(msg))) < 0) if ((len = read(_pfd, (struct sockaddr*)&t_saddr, msg, sizeof(msg))) < 0) {
logger::warning() << "iface::read_solicit() failed: " << logger::err();
return -1; return -1;
}
struct ip6_hdr* ip6h = struct ip6_hdr* ip6h =
(struct ip6_hdr* )(msg + ETH_HLEN); (struct ip6_hdr* )(msg + ETH_HLEN);
@ -466,8 +466,10 @@ ssize_t iface::read_advert(address& saddr, address& taddr)
uint8_t msg[256]; uint8_t msg[256];
ssize_t len; ssize_t len;
if ((len = read(_ifd, (struct sockaddr* )&t_saddr, msg, sizeof(msg))) < 0) if ((len = read(_ifd, (struct sockaddr* )&t_saddr, msg, sizeof(msg))) < 0) {
logger::warning() << "iface::read_advert() failed: " << logger::err();
return -1; return -1;
}
saddr = t_saddr.sin6_addr; saddr = t_saddr.sin6_addr;
@ -548,6 +550,7 @@ int iface::poll_all()
int len; int len;
if ((len = ::poll(&_pollfds[0], _pollfds.size(), 50)) < 0) { if ((len = ::poll(&_pollfds[0], _pollfds.size(), 50)) < 0) {
logger::error() << "Failed to poll interfaces: " << logger::err();
return -1; return -1;
} }

View File

@ -36,9 +36,10 @@ using namespace ndppd;
static int daemonize() static int daemonize()
{ {
pid_t pid = fork(); pid_t pid = fork();
if (pid < 0) {
if (pid < 0) logger::error() << "Failed to fork during daemonize: " << logger::err();
return -1; return -1;
}
if (pid > 0) if (pid > 0)
exit(0); exit(0);
@ -46,12 +47,15 @@ static int daemonize()
umask(0); umask(0);
pid_t sid = setsid(); pid_t sid = setsid();
if (sid < 0) {
if (sid < 0) logger::error() << "Failed to setsid during daemonize: " << logger::err();
return -1; return -1;
}
if (chdir("/") < 0) if (chdir("/") < 0) {
logger::error() << "Failed to change path during daemonize: " << logger::err();
return -1; return -1;
}
close(STDIN_FILENO); close(STDIN_FILENO);
close(STDOUT_FILENO); close(STDOUT_FILENO);
@ -288,10 +292,8 @@ int main(int argc, char* argv[], char* env[])
if (daemon) { if (daemon) {
logger::syslog(true); logger::syslog(true);
if (daemonize() < 0) { if (daemonize() < 0)
logger::error() << "Failed to daemonize process";
return 1; return 1;
}
} }
if (!pidfile.empty()) { if (!pidfile.empty()) {