1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
/*
* rocks/sockopt.c
*
* Sockets API implementation for setsockopt and getsockopt.
*
* Copyright (C) 2001 Victor Zandy
* See COPYING for distribution terms.
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include "log.h"
int
rs_setsockopt(int s, int level, int optname,
const void *optval, socklen_t optlen)
{
if (level == SOL_SOCKET && optname == SO_KEEPALIVE) {
rs_log("Ignoring app KEEPALIVE");
return 0;
}
if (level == SOL_SOCKET && optname == SO_SNDBUF) {
rs_log("Ignoring app SO_SNDBUF");
return 0;
}
if (level == SOL_SOCKET && optname == SO_RCVBUF) {
rs_log("Ignoring app SO_RCVBUF");
return 0;
}
if (level == SOL_SOCKET && optname == SO_LINGER) {
struct linger *lo = (struct linger *)optval;
rs_log("Ignoring app LINGER { l_onoff = %d, l_linger = %d }",
lo->l_onoff, lo->l_linger);
return 0;
}
return setsockopt(s, level, optname, optval, optlen);
}
int
rs_fcntl(int fd, int cmd, long arg)
{
if (cmd == F_SETFL && (arg & O_NONBLOCK)) {
rs_log("Ignoring app NONBLOCK");
return 0;
} else if (cmd == F_DUPFD) {
rs_log("SHIT! Ignoring app F_DUPFD");
return 0;
}
return fcntl(fd, cmd, arg);
}
int
rs_ioctl(int fd, int cmd, long arg)
{
return ioctl(fd, cmd, arg);
}
|