XCVII. Socket functions

Aviso

Este módulo es EXPERIMENTAL . Esto significa que el comportamineto de estas funciones , nombre de funciones y en definitiva TODO lo documentado aqui , puede cambiar en una futura version de PHP SIN AVISO . Quedas avisado , y utilizar este módulo es tu responsabiliad .

The socket extension implements a low-level interface to the socket communication functions , providing the possibility to act as a socket server as well as a client .

When using the socket functions described here , it is important to remember that while many of them have identical names to their C counterparts , they often have different declarations .

That said , those unfamiliar with socket programming can still find a lot of useful material in the appropriate Unix man pages , and there is a great deal of tutorial information on socket programming in C on the web , much of which can be applied , with slight modifications , to socket programming in PHP .

Ejemplo 1 .

Change the address and port variables to suit your setup and execute .

 
?php

 
error_reporting(

 
E_ALL)

 
;

 
/

 
*

 
Allow

 
the

 
script

 
to

 
hang

 
around

 
waiting

 
for

 
connections

 
.

 
*

 
/

 
set_time_limit(0)

 
;

 
$address

 
=

 
'192.168.1.53'

 
;

 
$port

 
=

 
10000

 
;

 
if

 
(($sock

 
=

 
socket(AF_INET

 
,

 
SOCK_STREAM

 
,

 
0)

 
)

 
0

 
)

 
{

 
echo

 
"socket(

 
)

 
failed

 
:

 
reason

 
:

 
"

 
.

 
strerror($sock

 
)

 
.

 
"\n"

 
;

 
}

 
if

 
(($ret

 
=

 
bind($sock

 
,

 
$address

 
,

 
$port)

 
)

 
0

 
)

 
{

 
echo

 
"bind(

 
)

 
failed

 
:

 
reason

 
:

 
"

 
.

 
strerror($ret

 
)

 
.

 
"\n"

 
;

 
}

 
if

 
(($ret

 
=

 
listen($sock

 
,

 
5)

 
)

 
0

 
)

 
{

 
echo

 
"listen(

 
)

 
failed

 
:

 
reason

 
:

 
"

 
.

 
strerror($ret

 
)

 
.

 
"\n"

 
;

 
}

 
do

 
{

 
if

 
(($msgsock

 
=

 
accept_connect($sock)

 
)

 
0

 
)

 
{

 
echo

 
"accept_connect(

 
)

 
failed

 
:

 
reason

 
:

 
"

 
.

 
strerror($msgsock

 
)

 
.

 
"\n"

 
;

 
break

 
;

 
    }

 
do

 
{

 
$buf

 
=

 
''

 
;

 
$ret

 
=

 
read($msgsock

 
,

 
$buf

 
,

 
2048)

 
;

 
if

 
($ret

 
0

 
)

 
{

 
echo

 
"read(

 
)

 
failed

 
:

 
reason

 
:

 
"

 
.

 
strerror($ret

 
)

 
.

 
"\n"

 
;

 
break

 
2

 
;

 
        }

 
if

 
($ret

 
==

 
0

 
)

 
{

 
break

 
2

 
;

 
        }

 
$buf

 
=

 
trim($buf)

 
;

 
if

 
($buf

 
==

 
'quit'

 
)

 
{

 
close($msgsock)

 
;

 
break

 
2

 
;

 
        }

 
$talkback

 
=

 
"PHP

 
:




 
You

 
said

 
'

 
$buf'.\n"

 
;

 
write($msgsock

 
,

 
$talkback

 
,

 
strlen($talkback))

 
;

 
echo

 
"$buf\n"

 
;

 
}

 
while

 
(true)

 
;

 
close($msgsock)

 
;

 
}

 
while

 
(true)

 
;

 
close($sock)

 
;

 
?





Ejemplo 2 .

 
?php

 
error_reporting(

 
E_ALL)

 
;

 
echo

 
"

 
h2

 
TCP

 
/

 
IP

 
Connection

 
/

 
h2

 
\n"

 
;

 
/

 
*

 
Get

 
the

 
port

 
for

 
the

 
WWW

 
service

 
.

 
*

 
/

 
$service_port

 
=

 
getservbyname('www'

 
,

 
'tcp')

 
;

 
/

 
*

 
Get

 
the

 
IP

 
address

 
for

 
the

 
target

 
host

 
.

 
*

 
/

 
$address

 
=

 
gethostbyname('www.php.net')

 
;

 
/

 
*

 
Create

 
a

 
TCP

 
/

 
IP

 
socket

 
.

 
*

 
/

 
$socket

 
=

 
socket(AF_INET

 
,

 
SOCK_STREAM

 
,

 
0)

 
;

 
if

 
($socket

 
0

 
)

 
{

 
echo

 
"socket(

 
)

 
failed

 
:

 
reason

 
:

 
"

 
.

 
strerror($socket

 
)

 
.

 
"\n"

 
;

 
}

 
else

 
{

 
"socket(

 
)

 
successful

 
:

 
"

 
.

 
strerror($socket

 
)

 
.

 
"\n"

 
;

 
}

 
echo

 
"Attempting

 
to

 
connect

 
to

 
'$address

 
'

 
on

 
port

 
'$service_port'..

 
."

 
;

 
$result

 
=

 
connect($socket

 
,

 
$address

 
,

 
$service_port)

 
;

 
if

 
($result

 
0

 
)

 
{

 
echo

 
"connect(

 
)

 
failed.\nReason

 
:

 
($result

 
)

 
"

 
.

 
strerror($result

 
)

 
.

 
"\n"

 
;

 
}

 
else

 
{

 
echo

 
"OK.\n"

 
;

 
}

 
$in

 
=

 
"HEAD

 
/

 
HTTP

 
/

 
1.0\r\n\r\n"

 
;

 
$out

 
=

 
''

 
;

 
echo

 
"Sending

 
HTTP

 
HEAD

 
request..

 
."

 
;

 
write($socket

 
,

 
$in

 
,

 
strlen($in))

 
;

 
echo

 
"OK.\n"

 
;

 
echo

 
"Reading

 
response:\n\n"

 
;

 
while

 
(read($socket

 
,

 
$out

 
,

 
2048)

 
)

 
{

 
echo

 
$out

 
;

 
}

 
echo

 
"Closing

 
socket..

 
."

 
;

 
close($socket)

 
;

 
echo

 
"OK.\n\n"

 
;

 
?





Tabla de contenidos
socket_accept -- Accepts a connection on a socket
socket_bind -- Binds a name to a socket
socket_clear_error -- Clears the error on the socket or the last error code
socket_close -- Closes a socket resource
socket_connect -- Initiates a connection on a socket
socket_create_listen -- Opens a socket on port to accept connections
socket_create_pair -- Creates a pair of indistinguishable sockets and stores them in fds.
socket_create -- Create a socket (endpoint for communication)
socket_get_option -- Gets socket options for the socket
socket_getpeername -- Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.
socket_getsockname -- Queries the local side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type.
socket_iovec_add -- Adds a new vector to the scatter/gather array
socket_iovec_alloc -- ...]) Builds a 'struct iovec' for use with sendmsg, recvmsg, writev, and readv
socket_iovec_delete -- Deletes a vector from an array of vectors
socket_iovec_fetch -- Returns the data held in the iovec specified by iovec_id[iovec_position]
socket_iovec_free -- Frees the iovec specified by iovec_id
socket_iovec_set -- Sets the data held in iovec_id[iovec_position] to new_val
socket_last_error -- Returns the last error on the socket
socket_listen -- Listens for a connection on a socket
socket_read -- Reads a maximum of length bytes from a socket
socket_readv -- Reads from an fd, using the scatter-gather array defined by iovec_id
socket_recv -- Receives data from a connected socket
socket_recvfrom -- Receives data from a socket, connected or not
socket_recvmsg -- Used to receive messages on a socket, whether connection-oriented or not
socket_select -- Runs the select() system call on the given arrays of sockets with a timeout specified by tv_sec and tv_usec
socket_send -- Sends data to a connected socket
socket_sendmsg -- Sends a message to a socket, regardless of whether it is connection-oriented or not
socket_sendto -- Sends a message to a socket, whether it is connected or not
socket_set_nonblock -- Sets nonblocking mode for file descriptor fd
socket_set_option -- Sets socket options for the socket
socket_shutdown -- Shuts down a socket for receiving, sending, or both.
socket_strerror -- Return a string describing a socket error
socket_write -- Write to a socket
socket_writev -- Writes to a file descriptor, fd, using the scatter-gather array defined by iovec_id