#46360 [NEW]: [patch] Add TCP_NODELAY constant for socket_{get,set}_option

From: Date: Wed, 22 Oct 2008 04:44:12 +0000
Subject: #46360 [NEW]: [patch] Add TCP_NODELAY constant for socket_{get,set}_option
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-129970@lists.php.net to get a copy of this message
From:             bugs at trick dot vanstaveren dot us
Operating system: All
PHP version:      5.2.6
PHP Bug Type:     Sockets related
Bug description:  [patch] Add TCP_NODELAY constant for socket_{get,set}_option

Description:
------------
C-level TCP function setsockopt allows users of TCP sockets to set the
TCP_NODELAY flag.  This flag disable's the typically default use of Nagle's
Algorithm[1] on a TCP socket.

1: http://en.wikipedia.org/wiki/Nagle%27s_algorithm

Nagle's Algorithm is bad for protocols like the extremely brief one spoken
by PHP/Java Bridge.  This patch is inspired by my use of PJB on FreeBSD
which does not automatically set TCP_NODELAY on localhost connections.

PHP does not expose this constant, although it is valid for the sockets
library as socket_set_option is a straightforward wrapper around
setsockopt.

Here is a trivial patch against PHP 5.2.5 to add the PHP constant
TCP_NODELAY.  I have tested this on FreeBSD 7.0 + PHP 5.2.5.  Patch is
quite simple so should apply fine against 5.3 / 6 with just a line offset. 
Constant is the same on Linux so will work fine there; am not sure about
win32.  Happy to test other versions and platforms if necessary.

--- ext/sockets/sockets.c.orig	2008-10-21 22:53:07.000000000 +0000
+++ ext/sockets/sockets.c	2008-10-21 22:53:00.000000000 +0000
@@ -509,6 +509,7 @@
 	REGISTER_LONG_CONSTANT("SO_ERROR",		SO_ERROR,		CONST_CS |
CONST_PERSISTENT);
 	REGISTER_LONG_CONSTANT("SOL_SOCKET",	SOL_SOCKET,		CONST_CS |
CONST_PERSISTENT);
 	REGISTER_LONG_CONSTANT("SOMAXCONN",		SOMAXCONN,		CONST_CS |
CONST_PERSISTENT);
+	REGISTER_LONG_CONSTANT("TCP_NODELAY",   TCP_NODELAY,	CONST_CS |
CONST_PERSISTENT);
 	REGISTER_LONG_CONSTANT("PHP_NORMAL_READ", PHP_NORMAL_READ, CONST_CS |
CONST_PERSISTENT);
 	REGISTER_LONG_CONSTANT("PHP_BINARY_READ", PHP_BINARY_READ, CONST_CS |
CONST_PERSISTENT);

Cheers,
Patrick van Staveren


-- 
Edit bug report at http://bugs.php.net/?id=46360&edit=1
-- 
Try a CVS snapshot (PHP 5.2): http://bugs.php.net/fix.php?id=46360&r=trysnapshot52
Try a CVS snapshot (PHP 5.3): http://bugs.php.net/fix.php?id=46360&r=trysnapshot53
Try a CVS snapshot (PHP 6.0): http://bugs.php.net/fix.php?id=46360&r=trysnapshot60
Fixed in CVS:                 http://bugs.php.net/fix.php?id=46360&r=fixedcvs
Fixed in release:             http://bugs.php.net/fix.php?id=46360&r=alreadyfixed
Need backtrace:               http://bugs.php.net/fix.php?id=46360&r=needtrace
Need Reproduce Script:        http://bugs.php.net/fix.php?id=46360&r=needscript
Try newer version:            http://bugs.php.net/fix.php?id=46360&r=oldversion
Not developer issue:          http://bugs.php.net/fix.php?id=46360&r=support
Expected behavior:            http://bugs.php.net/fix.php?id=46360&r=notwrong
Not enough info:              http://bugs.php.net/fix.php?id=46360&r=notenoughinfo
Submitted twice:              http://bugs.php.net/fix.php?id=46360&r=submittedtwice
register_globals:             http://bugs.php.net/fix.php?id=46360&r=globals
PHP 4 support discontinued:   http://bugs.php.net/fix.php?id=46360&r=php4
Daylight Savings:             http://bugs.php.net/fix.php?id=46360&r=dst
IIS Stability:                http://bugs.php.net/fix.php?id=46360&r=isapi
Install GNU Sed:              http://bugs.php.net/fix.php?id=46360&r=gnused
Floating point limitations:   http://bugs.php.net/fix.php?id=46360&r=float
No Zend Extensions:           http://bugs.php.net/fix.php?id=46360&r=nozend
MySQL Configuration Error:    http://bugs.php.net/fix.php?id=46360&r=mysqlcfg



Thread (6 messages)

« previous php.bugs (#129970) next »