diff options
Diffstat (limited to 'main/network.c')
-rw-r--r-- | main/network.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/main/network.c b/main/network.c index ab6a8ca715..aedff7e207 100644 --- a/main/network.c +++ b/main/network.c @@ -487,6 +487,11 @@ php_socket_t php_network_bind_socket_to_local_addr(const char *host, unsigned po setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char*)&sockoptval, sizeof(sockoptval)); } #endif +#ifdef TCP_NODELAY + if (sockopts & STREAM_SOCKOP_TCP_NODELAY) { + setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char*)&sockoptval, sizeof(sockoptval)); + } +#endif n = bind(sock, sa, socklen); @@ -726,7 +731,8 @@ PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock, socklen_t *addrlen, struct timeval *timeout, zend_string **error_string, - int *error_code + int *error_code, + int tcp_nodelay ) { php_socket_t clisock = -1; @@ -750,6 +756,11 @@ PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock, textaddr, addr, addrlen ); + if (tcp_nodelay) { +#ifdef TCP_NODELAY + setsockopt(clisock, IPPROTO_TCP, TCP_NODELAY, (char*)&tcp_nodelay, sizeof(tcp_nodelay)); +#endif + } } else { error = php_socket_errno(); } @@ -767,7 +778,6 @@ PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock, /* }}} */ - /* Connect to a remote host using an interruptible connect with optional timeout. * Optionally, the connect can be made asynchronously, which will implicitly * enable non-blocking mode on the socket. @@ -902,6 +912,15 @@ skip_bind: } } #endif + +#ifdef TCP_NODELAY + { + int val = 1; + if (sockopts & STREAM_SOCKOP_TCP_NODELAY) { + setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char*)&val, sizeof(val)); + } + } +#endif n = php_network_connect_socket(sock, sa, socklen, asynchronous, timeout ? &working_timeout : NULL, error_string, error_code); |