@@ -402,7 +402,7 @@ static inline void sub_times(struct timeval a, struct timeval b, struct timeval
402
402
* */
403
403
/* {{{ php_network_bind_socket_to_local_addr */
404
404
php_socket_t php_network_bind_socket_to_local_addr (const char * host , unsigned port ,
405
- int socktype , long sockopts , zend_string * * error_string , int * error_code
405
+ int socktype , long sockopts , long linger , zend_string * * error_string , int * error_code
406
406
)
407
407
{
408
408
int num_addrs , n , err = 0 ;
@@ -470,6 +470,15 @@ php_socket_t php_network_bind_socket_to_local_addr(const char *host, unsigned po
470
470
setsockopt (sock , IPPROTO_TCP , TCP_NODELAY , (char * )& sockoptval , sizeof (sockoptval ));
471
471
}
472
472
#endif
473
+ #ifdef SO_LINGER
474
+ if (sockopts & STREAM_SOCKOP_SO_LINGER ) {
475
+ struct linger val = {
476
+ .l_onoff = (linger > 0 ),
477
+ .l_linger = (int )linger
478
+ };
479
+ setsockopt (sock , IPPROTO_TCP , SO_LINGER , (char * )& val , sizeof (val ));
480
+ }
481
+ #endif
473
482
474
483
n = bind (sock , sa , socklen );
475
484
@@ -766,7 +775,8 @@ PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock,
766
775
/* {{{ php_network_connect_socket_to_host */
767
776
php_socket_t php_network_connect_socket_to_host (const char * host , unsigned short port ,
768
777
int socktype , int asynchronous , struct timeval * timeout , zend_string * * error_string ,
769
- int * error_code , const char * bindto , unsigned short bindport , long sockopts
778
+ int * error_code , const char * bindto , unsigned short bindport , long sockopts ,
779
+ long linger
770
780
)
771
781
{
772
782
int num_addrs , n , fatal = 0 ;
@@ -896,6 +906,17 @@ php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short
896
906
setsockopt (sock , IPPROTO_TCP , TCP_NODELAY , (char * )& val , sizeof (val ));
897
907
}
898
908
}
909
+ #endif
910
+ #ifdef SO_LINGER
911
+ {
912
+ if (sockopts & STREAM_SOCKOP_SO_LINGER ) {
913
+ struct linger val = {
914
+ .l_onoff = linger > 0 ,
915
+ .l_linger = (int )linger
916
+ };
917
+ setsockopt (sock , IPPROTO_TCP , SO_LINGER , (char * )& val , sizeof (val ));
918
+ }
919
+ }
899
920
#endif
900
921
n = php_network_connect_socket (sock , sa , socklen , asynchronous ,
901
922
timeout ? & working_timeout : NULL ,
0 commit comments