1 /******************************************************************************
3 *****************************************************************************/
9 #include <sys/socket.h>
11 #include <arpa/inet.h>
20 real_socket_t real_socket
;
28 *(void **) (&real_socket
) = dlsym(RTLD_NEXT
, "socket");
31 fprintf(stderr
, "Cannot load symbol 'socket' %s\n", dlerror());
35 temp
= getenv("MARK");
36 if(temp
) default_mark
= (int) strtoul(temp
, NULL
, 10);
40 int socket(int domain
, int type
, int protocol
)
42 int err2
, mark
= default_mark
;
43 int err
= real_socket(domain
, type
, protocol
);
45 if(domain
!= PF_INET
|| err
== -1) return err
;
47 err2
= setsockopt(err
, SOL_SOCKET
, SO_MARK
, (void *) &mark
, sizeof (int));
48 if(err2
== -1) { perror("setsockopt(... SO_MARK ...)"); exit(1); }