Типы сокетов PHP и размер окна TCP - PullRequest
2 голосов
/ 19 мая 2011

Так что это действительно вопрос из двух частей, первый из которых ведет ко второму.

Я работаю над проектом сервера PHP и немного запутался во всех возможных способах созданияразъем.Мне удалось создать три сокета каждый, используя новый метод.Кто-нибудь знает фундаментальную разницу между этими тремя методами, если таковые имеются?

Метод 1 с использованием 'socket_create'

$Socket1 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)
socket_bind($Socket1, $LocalIP, $LocalPort)
socket_connect($Socket1, $DestIP, $DestPort)
//Method 1 Read
socket_read($Socket1)
//Method 1 Write
socket_write($Socket1, $WriteMsg, strlen($WriteMsg))

Метод 2 с использованием 'fsockopen'

$Socket2 = fsockopen($Server, $Port)
//Method 2 Read
fgets($Socket2)
//Method 2 Write
fputs($Socket2, $PutMsg, strlen($PutMsg))

Метод 3 с использованием 'stream_socket_client'

$Socket3 = stream_socket_client('tcp://'.$DestIP.':'.$DestPort)
//Method 3 Read
stream_socket_recvfrom($Socket3, $RecSize)
//Method 3 Write
stream_socket_sendto($Socket3, $SendMsg)

Хотя я не понимаю разницу, я изучал все три варианта в поисках путиконтролировать размер окна TCP.Я пытаюсь передать пакет клиенту через локальную сеть с полезной нагрузкой 1460 байт, и после проверки захвата пакета часть данных TCP моего пакета всегда обрезается до 1448 байт.Есть идеи?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Это можно сделать с помощью команды socket_set_option (где параметры описаны в команде socket_get_option ):

$Socket1 = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)
// send window
socket_set_option($Socket1, SOL_SOCKET, SO_SNDBUF, 1460);

Только не забудьте позвонить сразу после socket_create. Если вам нужно изменить окно получения:

socket_set_option($Socket1, SOL_SOCKET, SO_RCVBUF, 1460);
0 голосов
/ 19 мая 2011

Вы не можете контролировать фактическое количество данных, полученных одновременно. TCP - это потоковый протокол. Он представляет API-интерфейс потока байтов для приложения. Вы просто должны быть готовы читать и перечитывать, пока не получите то, что хотите.

...