Foros del Web » Programando para Internet » PHP »

Tiempo de espera de un Socket

Estas en el tema de Tiempo de espera de un Socket en el foro de PHP en Foros del Web. Hola gente..! Tengo armada una conexion cliente-servidor donde el servidor es una aplicación VB y el cliente es una página php. Lo que necesito controlar ...
  #1 (permalink)  
Antiguo 11/07/2003, 07:59
cam
 
Fecha de Ingreso: abril-2003
Mensajes: 11
Antigüedad: 14 años, 8 meses
Puntos: 0
Pregunta Tiempo de espera de un Socket

Hola gente..!
Tengo armada una conexion cliente-servidor donde el servidor es una aplicación VB y el cliente es una página php. Lo que necesito controlar es que si el servidor no me respondió en x tiempo cerrar la conexión (del cliente, en el cliente).
El socket lo arme usando las funciones socket() conncet() write() read() de php.

En Concreto no se como cerrar el socket del lado del cliente si el servidor no me respondió en determinado tiempo.
  #2 (permalink)  
Antiguo 11/07/2003, 22:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mmm Podrías usar: socket_listen() en el bucle que uses para leer/escribir en tu socket abierto ..

Esa función te devuelte "true" si el socket conecto .. y fijate que tiene un segundo parámetro opcional que indica el nº de paquetes (supongo .. la explicación de PHP.net no es muy extensa ahí) .. así que podrías "probar" con cantidades y así lo usas en un condicional (IF) .. si hay "conexión" y está recibiendo datos .. sigues con el proceso .. "else" ... break; (sales de tu bucle .. o mandas tus funciones de socket_close() ...)

Con ese método .. sería sólo "cerrar conexión" si no se han recibido X paquetes desde el servidor (al cliente) .. Si a su vez quieres usar "tiempo" (estilo 'timeout') .. inicia un contador en ese momento (cuando la ejecución del socket_listen() con el 2º parámetro devuelva un "false" .. pues no recibío los paquetes esperados ..).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 12/07/2003, 09:01
cam
 
Fecha de Ingreso: abril-2003
Mensajes: 11
Antigüedad: 14 años, 8 meses
Puntos: 0
De acuerdo

Eso probaré entonces.

Ha.. ya que estoy aca ! No me identifica las funciones con el nombre de "socket_xxxx" y si sin el "socket_" adelante. Por eso no uso "socket_read" y uso "read". La versión del php es 4.0.6 y esta compilado con '--enable-sockets' . Por que pasará esto ?

Gracias por la respuesta
  #4 (permalink)  
Antiguo 12/07/2003, 20:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok.. si dices que usas "read" .. estaras usando fsockopen() y funciones afines? .. (sería recomendable que pongas el código que usas ..)

La versión de PHP que usas es poco más que del "cuarternario" .. Te recomiendo encarecidamente que te actualices la versión de PHP que usas.

Las funciones de socket_xxx() en teoría se activan usando -enable-sockets .. pero fijate bien si dice algo el manual oficial de PHP sobre la versión en la que aparecieron (pues como ya te he comentado .. la versión de PHP que usas es demasiado desfasada ..)
http://www.php.net/manual/en/ref.sockets.php

Un saldudo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 14/07/2003, 07:19
cam
 
Fecha de Ingreso: abril-2003
Mensajes: 11
Antigüedad: 14 años, 8 meses
Puntos: 0
No .. no uso fsockopen() . Pero como tenes toda la razon sobre la versión que
estoy usando no vamos a gastar chirolas en esto !. Ahora mismo
vamos a actualizar la version.
De todas formas pongo el codigo, pero no olvides sobre la version de php
con la que trabajo:

$service_port = ;
$address = gethostbyname('');
$socket = socket(AF_INET, SOCK_STREAM, 0);
if ($socket < 0) {
echo "socket_create() failed: reason: " . socket_strerror ($socket) . "\n";
}
$result = connect ($socket, $address, $service_port);
if ($result < 0) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
}
write ($socket, $in, strlen ($in));

read(&$socket,&$buff,50);

close ($socket);



Otro tema sera cual es la version ideal.
Gracias por tu ayuda !!
  #6 (permalink)  
Antiguo 14/07/2003, 08:19
Avatar de epplestun  
Fecha de Ingreso: octubre-2001
Mensajes: 1.621
Antigüedad: 16 años, 1 mes
Puntos: 5
El modulo de sockets esta habilitado a partir de la version 4.1.0 o versiones superiores, de todas maneras, este modulo es experimental.
__________________
Usuario registrado de Linux #288725
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:01.