summaryrefslogtreecommitdiff
path: root/ext/sockets/sockets.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/sockets/sockets.c')
-rw-r--r--ext/sockets/sockets.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index 06bd0ec6b..d0d029464 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -352,7 +352,7 @@ const zend_function_entry sockets_functions[] = {
PHP_FE(socket_clear_error, arginfo_socket_clear_error)
PHP_FE(socket_import_stream, arginfo_socket_import_stream)
- /* for downwards compatability */
+ /* for downwards compatibility */
PHP_FALIAS(socket_getopt, socket_get_option, arginfo_socket_get_option)
PHP_FALIAS(socket_setopt, socket_set_option, arginfo_socket_set_option)
@@ -843,6 +843,9 @@ PHP_MINIT_FUNCTION(sockets)
REGISTER_LONG_CONSTANT("SO_RCVTIMEO", SO_RCVTIMEO, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("SO_TYPE", SO_TYPE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("SO_ERROR", SO_ERROR, CONST_CS | CONST_PERSISTENT);
+#ifdef SO_BINDTODEVICE
+ REGISTER_LONG_CONSTANT("SO_BINDTODEVICE", SO_BINDTODEVICE, CONST_CS | CONST_PERSISTENT);
+#endif
REGISTER_LONG_CONSTANT("SOL_SOCKET", SOL_SOCKET, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("SOMAXCONN", SOMAXCONN, CONST_CS | CONST_PERSISTENT);
#ifdef TCP_NODELAY
@@ -1822,8 +1825,8 @@ PHP_FUNCTION(socket_recvfrom)
retval = recvfrom(php_sock->bsd_socket, recv_buf, arg3, arg4, (struct sockaddr *)&s_un, (socklen_t *)&slen);
if (retval < 0) {
- efree(recv_buf);
PHP_SOCKET_ERROR(php_sock, "unable to recvfrom", errno);
+ efree(recv_buf);
RETURN_FALSE;
}
@@ -1847,8 +1850,8 @@ PHP_FUNCTION(socket_recvfrom)
retval = recvfrom(php_sock->bsd_socket, recv_buf, arg3, arg4, (struct sockaddr *)&sin, (socklen_t *)&slen);
if (retval < 0) {
- efree(recv_buf);
PHP_SOCKET_ERROR(php_sock, "unable to recvfrom", errno);
+ efree(recv_buf);
RETURN_FALSE;
}
@@ -1876,8 +1879,8 @@ PHP_FUNCTION(socket_recvfrom)
retval = recvfrom(php_sock->bsd_socket, recv_buf, arg3, arg4, (struct sockaddr *)&sin6, (socklen_t *)&slen);
if (retval < 0) {
- efree(recv_buf);
PHP_SOCKET_ERROR(php_sock, "unable to recvfrom", errno);
+ efree(recv_buf);
RETURN_FALSE;
}
@@ -2355,7 +2358,19 @@ ipv6_loop_hops:
#endif
break;
}
-
+#ifdef SO_BINDTODEVICE
+ case SO_BINDTODEVICE: {
+ if (Z_TYPE_PP(arg4) == IS_STRING) {
+ opt_ptr = Z_STRVAL_PP(arg4);
+ optlen = Z_STRLEN_PP(arg4);
+ } else {
+ opt_ptr = "";
+ optlen = 0;
+ }
+ break;
+ }
+#endif
+
default:
convert_to_long_ex(arg4);
ov = Z_LVAL_PP(arg4);