Skip to content

Commit 7be195c

Browse files
devnexenbukka
authored andcommitted
Support fpm_get_socket_listening_queue on macOS
Using TCP_CONNECTION_INFO socket option.
1 parent 838746b commit 7be195c

File tree

4 files changed

+39
-1
lines changed

4 files changed

+39
-1
lines changed

NEWS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ PHP NEWS
1414
. Emit error for invalid port setting. (David Carlier)
1515
. Added extra check for FPM proc dumpable on SELinux based systems.
1616
(David Carlier)
17+
. Added support for listening queue on macOS. (David Carlier)
1718

1819
- Intl:
1920
. Update all grandfathered language tags with preferred values

sapi/fpm/config.m4

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,19 @@ AC_DEFUN([AC_FPM_LQ],
343343
AC_DEFINE([HAVE_LQ_TCP_INFO], 1, [do we have TCP_INFO?])
344344
fi
345345
346+
AC_MSG_CHECKING([for TCP_CONNECTION_INFO])
347+
348+
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netinet/tcp.h>]], [[struct tcp_connection_info ti; int x = TCP_CONNECTION_INFO;]])], [
349+
have_lq=tcp_connection_info
350+
AC_MSG_RESULT([yes])
351+
], [
352+
AC_MSG_RESULT([no])
353+
])
354+
355+
if test "$have_lq" = "tcp_connection_info"; then
356+
AC_DEFINE([HAVE_LQ_TCP_CONNECTION_INFO], 1, [do we have TCP_CONNECTION_INFO?])
357+
fi
358+
346359
if test "$have_lq" = "no" ; then
347360
AC_MSG_CHECKING([for SO_LISTENQLEN])
348361

sapi/fpm/fpm/fpm_config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
# define HAVE_FPM_TRACE 0
7171
#endif
7272

73-
#if defined(HAVE_LQ_TCP_INFO) || defined(HAVE_LQ_SO_LISTENQ)
73+
#if defined(HAVE_LQ_TCP_INFO) || defined(HAVE_LQ_TCP_CONNECTION_INFO) || defined(HAVE_LQ_SO_LISTENQ)
7474
# define HAVE_FPM_LQ 1
7575
#else
7676
# define HAVE_FPM_LQ 0

sapi/fpm/fpm/fpm_sockets.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,30 @@ int fpm_socket_get_listening_queue(int sock, unsigned *cur_lq, unsigned *max_lq)
524524
return 0;
525525
}
526526

527+
#elif defined(HAVE_LQ_TCP_CONNECTION_INFO)
528+
529+
#include <netinet/tcp.h>
530+
531+
int fpm_socket_get_listening_queue(int sock, unsigned *cur_lq, unsigned *max_lq)
532+
{
533+
struct tcp_connection_info info;
534+
socklen_t len = sizeof(info);
535+
536+
if (0 > getsockopt(sock, IPPROTO_TCP, TCP_CONNECTION_INFO, &info, &len)) {
537+
zlog(ZLOG_SYSERROR, "failed to retrieve TCP_CONNECTION_INFO for socket");
538+
return -1;
539+
}
540+
541+
if (cur_lq) {
542+
*cur_lq = info.tcpi_tfo_syn_data_acked;
543+
}
544+
545+
if (max_lq) {
546+
*max_lq = 0;
547+
}
548+
549+
return 0;
550+
}
527551
#endif
528552

529553
#ifdef HAVE_LQ_SO_LISTENQ

0 commit comments

Comments
 (0)