]>
Commit | Line | Data |
---|---|---|
fb98beff ER |
1 | --- PHP_5_3/ext/sockets/sockets.c 2011/03/14 22:27:40 309237 |
2 | +++ PHP_5_3/ext/sockets/sockets.c 2011/03/14 22:59:05 309238 | |
3 | @@ -402,16 +402,13 @@ | |
4 | } | |
5 | /* }}} */ | |
6 | ||
7 | -static int php_accept_connect(php_socket *in_sock, php_socket **new_sock, struct sockaddr *la TSRMLS_DC) /* {{{ */ | |
8 | +static int php_accept_connect(php_socket *in_sock, php_socket **new_sock, struct sockaddr *la, socklen_t *la_len TSRMLS_DC) /* {{{ */ | |
9 | { | |
10 | - socklen_t salen; | |
11 | php_socket *out_sock = (php_socket*)emalloc(sizeof(php_socket)); | |
12 | ||
13 | *new_sock = out_sock; | |
14 | - salen = sizeof(*la); | |
15 | - out_sock->blocking = 1; | |
16 | ||
17 | - out_sock->bsd_socket = accept(in_sock->bsd_socket, la, &salen); | |
18 | + out_sock->bsd_socket = accept(in_sock->bsd_socket, la, la_len); | |
19 | ||
20 | if (IS_INVALID_SOCKET(out_sock)) { | |
21 | PHP_SOCKET_ERROR(out_sock, "unable to accept incoming connection", errno); | |
22 | @@ -419,6 +416,10 @@ | |
23 | return 0; | |
24 | } | |
25 | ||
26 | + out_sock->error = 0; | |
27 | + out_sock->blocking = 1; | |
28 | + out_sock->type = la->sa_family; | |
29 | + | |
30 | return 1; | |
31 | } | |
32 | /* }}} */ | |
33 | @@ -1023,9 +1024,10 @@ | |
34 | Accepts a connection on the listening socket fd */ | |
35 | PHP_FUNCTION(socket_accept) | |
36 | { | |
37 | - zval *arg1; | |
38 | - php_socket *php_sock, *new_sock; | |
39 | - struct sockaddr_in sa; | |
40 | + zval *arg1; | |
41 | + php_socket *php_sock, *new_sock; | |
42 | + php_sockaddr_storage sa; | |
43 | + socklen_t sa_len = sizeof(sa); | |
44 | ||
45 | if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &arg1) == FAILURE) { | |
46 | return; | |
47 | @@ -1033,12 +1035,9 @@ | |
48 | ||
49 | ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket); | |
50 | ||
51 | - if (!php_accept_connect(php_sock, &new_sock, (struct sockaddr *) &sa TSRMLS_CC)) { | |
52 | + if (!php_accept_connect(php_sock, &new_sock, (struct sockaddr*)&sa, &sa_len TSRMLS_CC)) { | |
53 | RETURN_FALSE; | |
54 | } | |
55 | - | |
56 | - new_sock->error = 0; | |
57 | - new_sock->blocking = 1; | |
58 | ||
59 | ZEND_REGISTER_RESOURCE(return_value, new_sock, le_socket); | |
60 | } |