XCIV. Socket functions
| Warning |
|
This extension is EXPERIMENTAL. The behaviour of this extension, including the
names of its functions, and anything else documented about this extension may change in a future
release of PHP without notice. Be warned and use this extension at your own risk.
|
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.
The socket functions described here are part of an extension to PHP which must be enabled
at compile time by giving the --enable-sockets option to configure.
For a more generic client-side socket interface, see
fsockopen() and pfsockopen().
When using these functions, it is important to remember that while many of them have
identical names to their C counterparts, they often have different declarations. Please be sure to
read the descriptions to avoid confusion.
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.
|
Example 1. Socket example: Simple TCP/IP server
This example shows a simple talkback server. Change the address and port
variables to suit your setup and execute. You may then connect to the server with a command similar
to: telnet 192.168.1.53 10000 (where the address and port match your setup). Anything you
type will then be output on the server side, and echoed back to you. To disconnect, enter
'quit'.
<?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_create (AF_INET, SOCK_STREAM, 0)) < 0) {
echo "socket_create() failed: reason: " . socket_strerror ($sock) . "\n";
}
if (($ret = socket_bind ($sock, $address, $port)) < 0) {
echo "socket_bind() failed: reason: " . socket_strerror ($ret) . "\n";
}
if (($ret = socket_listen ($sock, 5)) < 0) {
echo "socket_listen() failed: reason: " . socket_strerror ($ret) . "\n";
}
do {
if (($msgsock = socket_accept($sock)) < 0) {
echo "socket_accept() failed: reason: " . socket_strerror ($msgsock) . "\n";
break;
}
do {
$buf = socket_read ($msgsock, 2048);
if ($buf == FALSE) {
echo "socket_read() failed: reason: " . socket_strerror ($ret) . "\n";
break 2;
}
if (!$buf) {
break 2;
}
$buf = trim ($buf);
if ($buf == 'quit') {
socket_close ($msgsock);
break 2;
}
$talkback = "PHP: You said '$buf'.\n";
socket_write ($msgsock, $talkback, strlen ($talkback));
echo "$buf\n";
} while (true);
socket_close ($msgsock);
} while (true);
socket_close ($sock);
?>
|
|
|
Example 2. Socket example: Simple TCP/IP client
This example shows a simple, one-shot HTTP client. It simply connects to a page, submits a
HEAD request, echoes the reply, and exits.
<?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_create (AF_INET, SOCK_STREAM, 0);
if ($socket < 0) {
echo "socket_create() failed: reason: " . socket_strerror ($socket) . "\n";
} else {
"socket_create() successful: " . socket_strerror ($socket) . "\n";
}
echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect ($socket, $address, $service_port);
if ($result < 0) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
} else {
echo "OK.\n";
}
$in = "HEAD / HTTP/1.0\r\n\r\n";
$out = '';
echo "Sending HTTP HEAD request...";
socket_write ($socket, $in, strlen ($in));
echo "OK.\n";
echo "Reading response:\n\n";
while ($out = socket_read ($socket, 2048)) {
echo $out;
}
echo "Closing socket...";
socket_close ($socket);
echo "OK.\n\n";
?>
|
|
- Table of Contents
- socket_accept -- Accepts a connection on a
socket
- socket_bind -- Binds a name to a socket
- socket_close -- Closes a socket
descriptor
- socket_connect -- Initiates a connection
on a socket
- socket_listen -- Listens for a connection
on a socket
- socket_read -- Reads from a socket
- socket_create -- Create a socket (endpoint
for communication)
- socket_strerror -- Return a string
describing a socket error
- socket_write -- Write to a socket
- socket_fd_alloc -- Allocates a new file
descriptor set
- socket_fd_free -- Deallocates a file
descriptor set
- socket_fd_set -- Adds (a) file
descriptor(s) to a set
- socket_fd_clear -- Clears (a) file
descriptor(s) from a set
- socket_fd_isset -- Checks to see if a
file descriptor is set within the file descrirptor set
- socket_fd_zero -- Clears a file descriptor
set
- socket_select -- Runs the select() system
call on the sets mentioned with a timeout specified by tv_sec and tv_usec
- socket_create_listen -- Opens a
socket on port to accept connections
- socket_set_nonblock -- Sets
nonblocking mode for file descriptor fd
- socket_getsockname -- Given an fd,
stores a string representing sa.sin_addr and the value of sa.sin_port into addr and port describing
the local side of a socket
- socket_getpeername -- Given an fd,
stores a string representing sa.sin_addr and the value of sa.sin_port into addr and port describing
the remote side of a socket
- socket_iovec_alloc -- ...]) Builds a
'struct iovec' for use with sendmsg, recvmsg, writev, and readv
- socket_iovec_fetch -- Returns the data
held in the iovec specified by iovec_id[iovec_position]
- socket_iovec_set -- Sets the data held
in iovec_id[iovec_position] to new_val
- socket_iovec_add -- Adds a new vector to
the scatter/gather array
- socket_iovec_delete -- Deletes a
vector from an array of vectors
- socket_iovec_free -- Frees the iovec
specified by iovec_id
- socket_readv -- Reads from an fd, using the
scatter-gather array defined by iovec_id
- socket_writev -- Writes to a file
descriptor, fd, using the scatter-gather array defined by iovec_id
- socket_recv -- Receives data from a connected
socket
- socket_send -- Sends data to a connected
socket
- socket_recvfrom -- Receives data from a
socket, connected or not
- socket_sendto -- Sends a message to a
socket, whether it is connected or not
- socket_recvmsg -- Used to receive messages
on a socket, whether connection-oriented or not
- socket_sendmsg -- Sends a message to a
socket, regardless of whether it is connection-oriented or not
- socket_getopt -- Gets socket options for
the socket
- socket_setopt -- |array optval) Sets socket
options for the socket
- socket_create_pair -- Creates a pair
of indistinguishable sockets and stores them in fds.
- socket_shutdown -- Shuts down a socket
for receiving, sending, or both.
- socket_last_error -- Returns/Clears the
last error on the socket
|