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