|
1 | 1 | <?xml version="1.0" encoding="utf-8"?> |
2 | | -<!-- EN-Revision: eef7fb60d16864b253aa3aa95a57f8b1cfd41451 Maintainer: PhilDaiguille Status: ready --> |
| 2 | +<!-- EN-Revision: 2c357a0dd6cc195bce10fa974ea14a2e30eb4b5b Maintainer: lacatoire Status: ready --> |
3 | 3 | <!-- Reviewed: yes --> |
4 | 4 | <refentry xml:id="function.socket-atmark" xmlns="http://docbook.org/ns/docbook"> |
5 | 5 | <refnamediv> |
|
45 | 45 | &reftitle.examples; |
46 | 46 | <para> |
47 | 47 | <example> |
48 | | - <title>Uso de <function>socket_atmark</function> para definir la dirección fuente</title> |
| 48 | + <title>Uso de <function>socket_atmark</function> para comprobar si el socket está listo para leer datos fuera de banda.</title> |
49 | 49 | <programlisting role="php"> |
50 | 50 | <![CDATA[ |
51 | 51 | <?php |
52 | | -// Crear un nuevo socket |
53 | | -$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); |
54 | | -var_dump(socket_atmark($sock)); |
55 | | -// Cerrar |
56 | | -socket_close($sock); |
| 52 | +$socketServer = socket_create( AF_INET, SOCK_STREAM, SOL_TCP ); |
| 53 | +socket_set_option( $socketServer, SOL_SOCKET, SO_REUSEADDR, 1 ); |
| 54 | +socket_bind( $socketServer, '127.0.0.1' ); |
| 55 | +socket_listen( $socketServer ); |
| 56 | +
|
| 57 | +$socketClient = socket_create( AF_INET, SOCK_STREAM, SOL_TCP ); |
| 58 | +socket_getsockname( $socketServer, $stAddr, $uPort ); |
| 59 | +socket_connect( $socketClient, $stAddr, $uPort ); |
| 60 | +
|
| 61 | +$socket = socket_accept( $socketServer ); |
| 62 | +socket_shutdown( $socket, 1 ); |
| 63 | +
|
| 64 | +$st = 'Estos son datos normales.'; |
| 65 | +socket_send( $socketClient, $st, strlen( $st ), 0 ); |
| 66 | +$st = '!'; # TCP solo permite un byte de datos urgentes. |
| 67 | +socket_send( $socketClient, $st, strlen( $st ), MSG_OOB ); |
| 68 | +$st = 'No tan urgente.'; |
| 69 | +socket_send( $socketClient, $st, strlen( $st ), 0 ); |
| 70 | +socket_shutdown( $socketClient ); |
| 71 | +
|
| 72 | +do { |
| 73 | + if ( socket_atmark( $socket ) ) { |
| 74 | + $rc = socket_recv( $socket, $st, 65536, MSG_OOB ); |
| 75 | + echo "Datos urgentes recibidos: ({$rc}) {$st}\n"; |
| 76 | + } else { |
| 77 | + $rc = socket_recv( $socket, $st, 1024, 0 ); |
| 78 | + echo "Datos normales recibidos: ({$rc}) {$st}\n"; |
| 79 | + } |
| 80 | +} while ( $rc > 0 ); |
| 81 | +socket_close( $socketServer ); |
| 82 | +socket_close( $socketClient ); |
| 83 | +socket_close( $socket ); |
57 | 84 | ?> |
58 | 85 | ]]> |
59 | 86 | </programlisting> |
| 87 | + &example.outputs; |
| 88 | + <screen> |
| 89 | +<![CDATA[ |
| 90 | +Datos normales recibidos: (25) Estos son datos normales. |
| 91 | +Datos urgentes recibidos: (1) ! |
| 92 | +Datos normales recibidos: (15) No tan urgente. |
| 93 | +Datos normales recibidos: (0) |
| 94 | +]]> |
| 95 | + </screen> |
60 | 96 | </example> |
61 | 97 | </para> |
62 | 98 | </refsect1> |
|
0 commit comments