Question

So this is really a two part question with the first leading to the second.

I'm working on a PHP server project and I'm a bit confused with all the different ways I can create a socket. I've managed to create three sockets each using a new method. Does anyone know the fundamental difference between these three methods if any?

Method 1 using '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))

Method 2 using 'fsockopen'

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

Method 3 using '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)

Although I don't understand the difference I was exploring all three options looking for a way to control the TCP Window Size. I'm trying to push a packet to a client over my LAN that has a data payload of 1460 bytes and after reviewing a packet capture the TCP data portion of my packet is always cut short at 1448 bytes. Any ideas?

Thanks in advance!

Was it helpful?

Solution

You can't control the actual amount of data received at a time. TCP is a streaming protocol. It presents a byte-stream API to the application. You just have to be prepared to read and re-read until you have got what you want.

OTHER TIPS

You should be able to do this with the socket_set_option command (where options are documented in the socket_get_option command):

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

Just be sure to call it right after socket_create. If you need the receive window modified:

socket_set_option($Socket1, SOL_SOCKET, SO_RCVBUF, 1460);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top