Add three new read-only socket options, which allow regression tests

and other applications to query the state of the stack regarding the
accept queue on a listen socket:

SO_LISTENQLIMIT    Return the value of so_qlimit (socket backlog)
SO_LISTENQLEN      Return the value of so_qlen (complete sockets)
SO_LISTENINCQLEN   Return the value of so_incqlen (incomplete sockets)

Minor white space tweaks to existing socket options to make them
consistent.

Discussed with:	andre
MFC after:	1 week
This commit is contained in:
Robert Watson 2005-09-18 21:08:03 +00:00
parent d1d8e770db
commit 8434c29b28
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=150302
2 changed files with 20 additions and 0 deletions

View file

@ -1677,6 +1677,7 @@ sosetopt(so, sopt)
break;
}
break;
case SO_LABEL:
#ifdef MAC
error = sooptcopyin(sopt, &extmac, sizeof extmac,
@ -1689,6 +1690,7 @@ sosetopt(so, sopt)
error = EOPNOTSUPP;
#endif
break;
default:
error = ENOPROTOOPT;
break;
@ -1817,6 +1819,7 @@ sogetopt(so, sopt)
tv.tv_usec = (optval % hz) * tick;
error = sooptcopyout(sopt, &tv, sizeof tv);
break;
case SO_LABEL:
#ifdef MAC
error = sooptcopyin(sopt, &extmac, sizeof(extmac),
@ -1832,6 +1835,7 @@ sogetopt(so, sopt)
error = EOPNOTSUPP;
#endif
break;
case SO_PEERLABEL:
#ifdef MAC
error = sooptcopyin(sopt, &extmac, sizeof(extmac),
@ -1847,6 +1851,19 @@ sogetopt(so, sopt)
error = EOPNOTSUPP;
#endif
break;
case SO_LISTENQLIMIT:
optval = so->so_qlimit;
goto integer;
case SO_LISTENQLEN:
optval = so->so_qlen;
goto integer;
case SO_LISTENINCQLEN:
optval = so->so_incqlen;
goto integer;
default:
error = ENOPROTOOPT;
break;

View file

@ -133,6 +133,9 @@ typedef __uid_t uid_t;
#if __BSD_VISIBLE
#define SO_LABEL 0x1009 /* socket's MAC label */
#define SO_PEERLABEL 0x1010 /* socket's peer's MAC label */
#define SO_LISTENQLIMIT 0x1011 /* socket's backlog limit */
#define SO_LISTENQLEN 0x1012 /* socket's complete queue length */
#define SO_LISTENINCQLEN 0x1013 /* socket's incomplete queue length */
#endif
/*