stream_context_set_option设置的选项在socket_get_option里能体现不出来

hk2018

请教大家个问题,看listen里有对流的设置,然后把流通过socket_import_stream 转换为socket
然后通过socket_set_option 对转换的socket进行设置
比如设置  TCP_NODELAY 开启,
7.1后 可以直接通过对流的设置来设置这一项  https://www.php.net/manual/en/context.socket.php 
问题是:通过对stream直接设置TCP_NODELAY 开启,然后把stream转换为socket,然后通过
socket_get_option($socket,SOL_TCP,TCP_NODELAY)获取,为啥值还是0呢,方式不对吗,怎么知道我设置成功了呢

<?php
$local_socket="tcp://0.0.0.0:8081";
$flags=STREAM_SERVER_BIND | STREAM_SERVER_LISTEN;
$context_option=;
$context_option = 5;

$context = \stream_context_create($context_option);

//7.1.0加上了tcp_nodelay选项,我这是7.3.4
stream_context_set_option($context, 'socket', 'tcp_nodelay', true);//第10行

$mainSocket = \stream_socket_server($local_socket, $errno, $errmsg, $flags, $context);
if (!$mainSocket) {
throw new Exception($errmsg);
}

$socket = \socket_import_stream($mainSocket);
socket_set_option($socket, SOL_SOCKET, SO_KEEPALIVE, 1);
//socket_set_option($socket, SOL_TCP, TCP_NODELAY, 1); //第20行

echo "tcp_nodelay:".print_r(socket_get_option($socket,SOL_TCP,TCP_NODELAY),true).PHP_EOL;

print_r(stream_context_get_options($mainSocket));
echo PHP_EOL;

 通过第20行里的socket_set_option来设置,下面socket_get_option取到的tcp_nodelay为1,通过第10行的stream_context_set_option来设置,为啥下面取tcp_nodelay不是1呢
 
 

2163 0 0
0个回答

年代过于久远,无法发表回答
🔝