Hi Stuart,

Thanks a bunch for you suggestions. This email got lost in my inbox. Will let you know if I have some questions. Appreciate your help :)

Thx

On 1/11/11 1:43 PM, Stuart Henderson wrote:
On 2010-12-03, Godesi<dabhee...@aim.com>  wrote:
relay web {
Try applying this diff from -current and rebuilding relayd.
It is an inline diff, if your mail client has problems giving
you valid plaintext then try pasting it from a web-based
mailing list archive instead.

I think the diff will probably apply fairly cleanly as I don't
think there have been big changes in relayd since 4.7, but I am not
certain. If you don't know how or have problems patching/building,
hopefully someone else will have time to explain things, or you
could try a -current snapshot which includes this already.

Also check that the following limits are sufficiently high for
the number of TCP connections:

login.conf, "daemon" class, openfiles-cur
sysctl kern.maxfiles

---------------------
PatchSet 489
Date: 2010/12/20 12:38:06
Author: dhill
Branch: HEAD
Tag: (none)
Log:
Only set SO_REUSEPORT for listening ports.

Fixes "Address already in use" errors seen on high load.

OK reyk@ pyr@

Members:
        check_tcp.c:1.38->1.39
        relay.c:1.127->1.128

Index: src/usr.sbin/relayd/check_tcp.c
diff -u src/usr.sbin/relayd/check_tcp.c:1.38 
src/usr.sbin/relayd/check_tcp.c:1.39
--- src/usr.sbin/relayd/check_tcp.c:1.38        Tue Nov 30 14:38:45 2010
+++ src/usr.sbin/relayd/check_tcp.c     Mon Dec 20 12:38:06 2010
@@ -50,7 +50,6 @@
  check_tcp(struct ctl_tcp_event *cte)
  {
        int                      s;
-       int                      type;
        socklen_t                len;
        struct timeval           tv;
        struct linger            lng;
@@ -79,10 +78,6 @@

        bzero(&lng, sizeof(lng));
        if (setsockopt(s, SOL_SOCKET, SO_LINGER,&lng, sizeof(lng)) == -1)
-               goto bad;
-
-       type = 1;
-       if (setsockopt(s, SOL_SOCKET, SO_REUSEPORT,&type, sizeof(type)) == -1)
                goto bad;

        if (cte->host->conf.ttl>  0) {
Index: src/usr.sbin/relayd/relay.c
diff -u src/usr.sbin/relayd/relay.c:1.127 src/usr.sbin/relayd/relay.c:1.128
--- src/usr.sbin/relayd/relay.c:1.127   Tue Nov 30 14:49:14 2010
+++ src/usr.sbin/relayd/relay.c Mon Dec 20 12:38:06 2010
@@ -59,7 +59,7 @@
  void           relay_init(void);
  void           relay_launch(void);
  int            relay_socket(struct sockaddr_storage *, in_port_t,
-                   struct protocol *, int);
+                   struct protocol *, int, int);
  int            relay_socket_listen(struct sockaddr_storage *, in_port_t,
                    struct protocol *);
  int            relay_socket_connect(struct sockaddr_storage *, in_port_t,
@@ -622,7 +622,7 @@

  int
  relay_socket(struct sockaddr_storage *ss, in_port_t port,
-    struct protocol *proto, int fd)
+    struct protocol *proto, int fd, int reuseport)
  {
        int s = -1, val;
        struct linger lng;
@@ -640,9 +640,12 @@
        bzero(&lng, sizeof(lng));
        if (setsockopt(s, SOL_SOCKET, SO_LINGER,&lng, sizeof(lng)) == -1)
                goto bad;
-       val = 1;
-       if (setsockopt(s, SOL_SOCKET, SO_REUSEPORT,&val, sizeof(int)) == -1)
-               goto bad;
+       if (reuseport) {
+               val = 1;
+               if (setsockopt(s, SOL_SOCKET, SO_REUSEPORT,&val,
+                       sizeof(int)) == -1)
+                       goto bad;
+       }
        if (fcntl(s, F_SETFL, O_NONBLOCK) == -1)
                goto bad;
        if (proto->tcpflags&  TCPFLAG_BUFSIZ) {
@@ -708,7 +711,7 @@
  {
        int     s;

-       if ((s = relay_socket(ss, port, proto, fd)) == -1)
+       if ((s = relay_socket(ss, port, proto, fd, 0)) == -1)
                return (-1);

        if (connect(s, (struct sockaddr *)ss, ss->ss_len) == -1) {
@@ -729,7 +732,7 @@
  {
        int s;

-       if ((s = relay_socket(ss, port, proto, -1)) == -1)
+       if ((s = relay_socket(ss, port, proto, -1, 1)) == -1)
                return (-1);

        if (bind(s, (struct sockaddr *)ss, ss->ss_len) == -1)

Reply via email to