ET or an * AF_INET6 socket, and designates * the port on the remote host to which a connection should be made. * @throws SocketsException * */ function socket_connect($socket, string $address, int $port = 0): void { error_clear_last(); $result = \socket_connect($socket, $address, $port); if ($result === false) { throw SocketsException::createFromPhpError(); } } /** * socket_create_listen creates a new socket resource of * type AF_INET listening on all * local interfaces on the given port waiting for new connections. * * This function is meant to ease the task of creating a new socket which * only listens to accept new connections. * * @param int $port The port on which to listen on all interfaces. * @param int $backlog The backlog parameter defines the maximum length * the queue of pending connections may grow to. * SOMAXCONN may be passed as * backlog parameter, see * socket_listen for more information. * @return resource socket_create_listen returns a new socket resource * on success. The error code can be retrieved with * socket_last_error. This code may be passed to * socket_strerror to get a textual explanation of the * error. * @throws SocketsException * */ function socket_create_listen(int $port, int $backlog = 128) { error_clear_last(); $result = \socket_create_listen($port, $backlog); if ($result === false) { throw SocketsException::createFromPhpError(); } return $result; } /** * socket_create_pair creates two connected and * indistinguishable sockets, and stores them in fd. * This function is commonly used in IPC (InterProcess Communication). * * @param int $domain The domain parameter specifies the protocol * family to be used by the socket. See socket_create * for the full list. * @param int $type The type parameter selects the type of communication * to be used by the socket. See socket_create for the * full list. * @param int $protocol The protocol parameter sets the specific * protocol within the specified domain to be used * when communicating on the returned socket. The proper value can be retrieved by * name by using getprotobyname. If * the desired protocol is TCP, or UDP the corresponding constants * SOL_TCP, and SOL_UDP * can also be used. * * See socket_create for the full list of supported * protocols. * @param resource[]|null $fd Reference to an array in which the two socket resources will be inserted. * @throws SocketsException * */ function socket_create_pair(int $domain, int $type, int $protocol, ?iterable &$fd): void { error_clear_last(); $result = \socket_create_pair($domain, $type, $protocol, $fd); if ($result === false) { throw SocketsException::createFromPhpError(); } } /** * Creates and returns a socket resource, also referred to as an endpoint * of communication. A typical network connection is made up of 2 sockets, one * performing the role of the client, and another performing the role of the server. * * @param int $domain The domain parameter specifies the protocol * family to be used by the socket. * @param int $type The type parameter selects the type of communication * to be used by the socket. * @param int $protocol The protocol parameter sets the specific * protocol within the specified domain to be used * when communicating on the returned socket. The proper value can be * retrieved by name by using getprotobyname. If * the desired protocol is TCP, or UDP the corresponding constants * SOL_TCP, and SOL_UDP * can also be used. * @return resource socket_create returns a socket resource on success. The actual error code can be retrieved by calling * socket_last_error. This error code may be passed to * socket_strerror to get a textual explanation of the * error. * @throws SocketsException * */ function socket_create(int $domain, int $type, int $protocol) { error_clear_last(); $result = \socket_create($domain, $type, $protocol); if ($result === false) { throw SocketsException::createFromPhpError(); } return $result; } /** * * * @param resource $socket * @return resource Return resource. * @throws SocketsException * */ function socket_export_stream($socket) { error_clear_last(); $result = \socket_export_stream($socket); if ($result === false) { throw SocketsException::createFromPhpError(); } return $result; } /** * The socket_get_option function retrieves the value for * the option specified by the optname parameter for the * specified socket. * * @param resource $socket A valid socket resource created with socket_create * or socket_accept. * @param int $level The level parameter specifies the protocol * level at which the option resides. For example, to retrieve options at * the socket level, a level parameter of * SOL_SOCKET would be used. Other levels, such as * TCP, can be used by * specifying the protocol number of that level. Protocol numbers can be * found by using the getprotobyname function. * @param int $optname Reports whether the socket lingers on * socket_close if data is present. By default, * when the socket is closed, it attempts to send all unsent data. * In the case of a connection-oriented socket, * socket_close will wait for its peer to * acknowledge the data. * * If l_onoff is non-zero and * l_linger is zero, all the * unsent data will be discarded and RST (reset) is sent to the * peer in the case of a connection-oriented socket. * * On the other hand, if l_onoff is * non-zero and l_linger is non-zero, * socket_close will block until all the data * is sent or the time specified in l_linger * elapses. If the socket is non-blocking, * socket_close will fail and return an error. * @return mixed Returns the value of the given options. * @throws SocketsException * */ function socket_get_option($socket, int $level, int $optname) { error_clear_last(); $result = \socket_get_option($socket, $level, $optname); if ($result === false) { throw SocketsException::createFromPhpError(); } return $result; } /** * 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. * * @param resource $socket A valid socket resource created with socket_create * or socket_accept. * @param string $address If the given socket is of type AF_INET or * AF_INET6, socket_getpeername * will return the peers (remote) IP address in * appropriate notation (e.g. 127.0.0.1 or * fe80::1) in the address * parameter and, if the optional port parameter is * present, also the associated port. * * If the given socket is of type AF_UNIX, * socket_getpeername will return the Unix filesystem * path (e.g. /var/run/daemon.sock) in the * address parameter. * @param int|null $port If given, this will hold the port associated to * address. * @throws SocketsException * */ function socket_getpeername($socket, string &$address, ?int &$port = null): void { error_clear_last(); $result = \socket_getpeername($socket, $address, $port); if ($result === false) { throw SocketsException::createFromPhpError(); } } /** * * * @param resource $socket A valid socket resource created with socket_create * or socket_accept. * @param string|null $addr If the given socket is of type AF_INET * or AF_INET6, socket_getsockname * will return the local IP address in appropriate notation (e.g. * 127.0.0.1 or fe80::1) in the * address parameter and, if the optional * port parameter is present, also the associated port. * * If the given socket is of type AF_UNIX, * socket_getsockname will return the Unix filesystem * path (e.g. /var/run/daemon.sock) in the * address parameter. * @param int|null $port If provided, this will hold the associated port. * @throws SocketsException * */ function socket_getsockname($socket, ?string &$addr, ?int &$port = null): void { error_clear_last(); $result = \socket_getsockname($socket, $addr, $port); if ($result === false) { throw SocketsException::createFromPhpError(); } } /** * Imports a stream that encapsulates a socket into a socket extension resource. * * @param resource $stream The stream resource to import. * @return resource|false Returns FALSE. * @throws SocketsException * */ function socket_import_stream($stream) { error_clear_last(); $result = \socket_import_stream($stream); if ($result === null) { throw SocketsException::createFromPhpError(); } return $result; } /** * After the socket socket has been created * using socket_create and bound to a name with * socket_bind, it may be told to listen for incoming * connections on socket. * * socket_listen is applicable only to sockets of * type SOCK_STREAM or * SOCK_SEQPACKET. * * @param resource $socket A valid socket resource created with socket_create * or socket_addrinfo_bind * @param int $backlog A maximum of backlog incoming connections will be * queued for processing. If a connection request arrives with the queue * full the client may receive an error with an indication of * ECONNREFUSED, or, if the underlying protocol supports * retransmission, the request may be ignored so that retries may succeed. * * The maximum number passed to the backlog * parameter highly depends on the underlying platform. On Linux, it is * silently truncated to SOMAXCONN. On win32, if * passed SOMAXCONN, the underlying service provider * responsible for the socket will set the backlog to a maximum * reasonable value. There is no standard provision to * find out the actual backlog value on this platform. * @throws SocketsException * */ function socket_listen($socket, int $backlog = 0): void { error_clear_last(); $result = \socket_listen($socket, $backlog); if ($result === false) { throw SocketsException::createFromPhpError(); } } /** * The function socket_read reads from the socket * resource socket created by the * socket_create or * socket_accept functions. * * @param resource $socket A valid socket resource created with socket_create * or socket_accept. * @param int $length The maximum number of bytes read is specified by the * length parameter. Otherwise you can use * \r, \n, * or \0 to end reading (depending on the type * parameter, see below). * @param int $type Optional type parameter is a named constant: * * * * PHP_BINARY_READ (Default) - use the system * recv() function. Safe for reading binary data. * * * * * PHP_NORMAL_READ - reading stops at * \n or \r. * * * * @return string socket_read returns the data as a string on success (including if the remote host has closed the * connection). The error code can be retrieved with * socket_last_error. This code may be passed to * socket_strerror to get a textual representation of * the error. * @throws SocketsException * */ function socket_read($socket, int $length, int $type = PHP_BINARY_READ): string { error_clear_last(); $result = \socket_read($socket, $length, $type); if ($result === false) { throw SocketsException::createFromPhpError(); } return $result; } /** * The function socket_send sends * len bytes to the socket * socket from buf. * * @param resource $socket A valid socket resource created with socket_create * or socket_accept. * @param string $buf A buffer containing the data that will be sent to the remote host. * @param int $len The number of bytes that will be sent to the remote host from * buf. * @param int $flags The value of flags can be any combination of * the following flags, joined with the binary OR (|) * operator. * * Possible values for flags * * * * MSG_OOB * * Send OOB (out-of-band) data. * * * * MSG_EOR * * Indicate a record mark. The sent data completes the record. * * * * MSG_EOF * * Close the sender side of the socket and include an appropriate * notification of this at the end of the sent data. The sent data * completes the transaction. * * * * MSG_DONTROUTE * * Bypass routing, use direct interface. * * * * * * @return int socket_send returns the number of bytes sent. * @throws SocketsException * */ function socket_send($socket, string $buf, int $len, int $flags): int { error_clear_last(); $result = \socket_send($socket, $buf, $len, $flags); if ($result === false) { throw SocketsException::createFromPhpError(); } return $result; } /** * * * @param resource $socket * @param array $message * @param int $flags * @return int Returns the number of bytes sent. * @throws SocketsException * */ function socket_sendmsg($socket, array $message, int $flags = 0): int { error_clear_last(); $result = \socket_sendmsg($socket, $message, $flags); if ($result === false) { throw SocketsException::createFromPhpError(); } return $result; } /** * The function socket_sendto sends * len bytes from buf * through the socket socket to the * port at the address addr. * * @param resource $socket A valid socket resource created using socket_create. * @param string $buf The sent data will be taken from buffer buf. * @param int $len len bytes from buf will be * sent. * @param int $flags The value of flags can be any combination of * the following flags, joined with the binary OR (|) * operator. * * Possible values for flags * * * * MSG_OOB * * Send OOB (out-of-band) data. * * * * MSG_EOR * * Indicate a record mark. The sent data completes the record. * * * * MSG_EOF * * Close the sender side of the socket and include an appropriate * notification of this at the end of the sent data. The sent data * completes the transaction. * * * * MSG_DONTROUTE * * Bypass routing, use direct interface. * * * * * * @param string $addr IP address of the remote host. * @param int $port port is the remote port number at which the data * will be sent. * @return int socket_sendto returns the number of bytes sent to the * remote host. * @throws SocketsException * */ function socket_sendto($socket, string $buf, int $len, int $flags, string $addr, int $port = 0): int { error_clear_last(); $result = \socket_sendto($socket, $buf, $len, $flags, $addr, $port); if ($result === false) { throw SocketsException::createFromPhpError(); } return $result; } /** * The socket_set_block function removes the * O_NONBLOCK flag on the socket specified by the * socket parameter. * * When an operation (e.g. receive, send, connect, accept, ...) is performed on * a blocking socket, the script will pause its execution until it receives * a signal or it can perform the operation. * * @param resource $socket A valid socket resource created with socket_create * or socket_accept. * @throws SocketsException * */ function socket_set_block($socket): void { error_clear_last(); $result = \socket_set_block($socket); if ($result === false) { throw SocketsException::createFromPhpError(); } } /** * The socket_set_nonblock function sets the * O_NONBLOCK flag on the socket specified by * the socket parameter. * * When an operation (e.g. receive, send, connect, accept, ...) is performed on * a non-blocking socket, the script will not pause its execution until it receives a * signal or it can perform the operation. Rather, if the operation would result * in a block, the called function will fail. * * @param resource $socket A valid socket resource created with socket_create * or socket_accept. * @throws SocketsException * */ function socket_set_nonblock($socket): void { error_clear_last(); $result = \socket_set_nonblock($socket); if ($result === false) { throw SocketsException::createFromPhpError(); } } /** * The socket_set_option function sets the option * specified by the optname parameter, at the * specified protocol level, to the value pointed to * by the optval parameter for the * socket. * * @param resource $socket A valid socket resource created with socket_create * or socket_accept. * @param int $level The level parameter specifies the protocol * level at which the option resides. For example, to retrieve options at * the socket level, a level parameter of * SOL_SOCKET would be used. Other levels, such as * TCP, can be used by specifying the protocol number of that level. * Protocol numbers can be found by using the * getprotobyname function. * @param int $optname The available socket options are the same as those for the * socket_get_option function. * @param int|string|array $optval The option value. * @throws SocketsException * */ function socket_set_option($socket, int $level, int $optname, $optval): void { error_clear_last(); $result = \socket_set_option($socket, $level, $optname, $optval); if ($result === false) { throw SocketsException::createFromPhpError(); } } /** * The socket_shutdown function allows you to stop * incoming, outgoing or all data (the default) from being sent through the * socket * * @param resource $socket A valid socket resource created with socket_create. * @param int $how The value of how can be one of the following: * * possible values for how * * * * 0 * * Shutdown socket reading * * * * 1 * * Shutdown socket writing * * * * 2 * * Shutdown socket reading and writing * * * * * * @throws SocketsException * */ function socket_shutdown($socket, int $how = 2): void { error_clear_last(); $result = \socket_shutdown($socket, $how); if ($result === false) { throw SocketsException::createFromPhpError(); } } /** * Exports the WSAPROTOCOL_INFO structure into shared memory and returns * an identifier to be used with socket_wsaprotocol_info_import. The * exported ID is only valid for the given target_pid. * * @param resource $socket A valid socket resource. * @param int $target_pid The ID of the process which will import the socket. * @return string Returns an identifier to be used for the import * @throws SocketsException * */ function socket_wsaprotocol_info_export($socket, int $target_pid): string { error_clear_last(); $result = \socket_wsaprotocol_info_export($socket, $target_pid); if ($result === false) { throw SocketsException::createFromPhpError(); } return $result; } /** * Imports a socket which has formerly been exported from another process. * * @param string $info_id The ID which has been returned by a former call to * socket_wsaprotocol_info_export. * @return resource Returns the socket resource * @throws SocketsException * */ function socket_wsaprotocol_info_import(string $info_id) { error_clear_last(); $result = \socket_wsaprotocol_info_import($info_id); if ($result === false) { throw SocketsException::createFromPhpError(); } return $result; } /** * Releases the shared memory corresponding to the given info_id. * * @param string $info_id The ID which has been returned by a former call to * socket_wsaprotocol_info_export. * @throws SocketsException * */ function socket_wsaprotocol_info_release(string $info_id): void { error_clear_last(); $result = \socket_wsaprotocol_info_release($info_id); if ($result === false) { throw SocketsException::createFromPhpError(); } }