OVH Cloud OVH Cloud

fwrite et socket

8 réponses
Avatar
Clement
Bonjour,

J'utilise le code suivant :

$error_happened = false;
if(!$socket = fsockopen("127.0.0.1","6789",$errno,$errstr,10))
{
$error_happened = true;
}
if(!$error_happened)
{
if(!fwrite($socket,$trame, strlen($trame)))
{
$error_happened = true;
fclose($socket);
}
}

Le probleme, c'est que de temps en temps, fwrite me fait " fwrite(): send of
xx bytes failed with errno=0" (avec par ex. xx=66). j'ai remarqué que ce
probleme arrive souvent au début (quand c'est la premiere fois depuis que je
démarre mon PC), et que si je rafraichis la page, ca fonctionne parfaitement
(ainsi que les appels suivants)... Cela ne vient donc pas

Y'a-t-il une fonction à appeler la première fois ? (comme en C, WSAInit...)

Note : $trame contient des trucs du genre : S5112316265718639 (ou le
carré est le caractère chr(30)).

Merci d'avance pour vos réponses j'espère nombreuses ;o)

Clément.

8 réponses

Avatar
P'tit Marcel

Bonjour,

J'utilise le code suivant :

$error_happened = false;
if(!$socket = fsockopen("127.0.0.1","6789",$errno,$errstr,10))


si tu fais un telnet 127.0.0.1 6789
ça donne quoi ?

quel système d'exploitation, quelle version de php ?

un

print_r(stream_get_transports());

renvoit quoi ?


--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/

Avatar
Clement
"P'tit Marcel" a écrit dans le message de
news: 42f3449f$0$15370$

Bonjour,

J'utilise le code suivant :

$error_happened = false;
if(!$socket = fsockopen("127.0.0.1","6789",$errno,$errstr,10))


si tu fais un telnet 127.0.0.1 6789
ça donne quoi ?


Le telnet marche très bien... Le problème c'est j'ai l'erreur de temps en
temps, mais assez rarement, alors je ne peux pas trop savoir.

quel système d'exploitation, quelle version de php ?


Windows 2003 server, PHP 4.4.0.0

print_r(stream_get_transports());


Impossible je n'ai pas PHP 5.

Merci.
Je serai absent pendant 1 semaine, alors je ne répondrai pas tout de
suite... Mais n'hésitez pas à répondre qd meme !

Clément.


Avatar
Clement
"Clement" a écrit dans le message de news:
42f37b87$0$5208$
"P'tit Marcel" a écrit dans le message
de news: 42f3449f$0$15370$

Bonjour,

J'utilise le code suivant :

$error_happened = false;
if(!$socket = fsockopen("127.0.0.1","6789",$errno,$errstr,10))


si tu fais un telnet 127.0.0.1 6789
ça donne quoi ?


Le telnet marche très bien... Le problème c'est j'ai l'erreur de temps en
temps, mais assez rarement, alors je ne peux pas trop savoir.

quel système d'exploitation, quelle version de php ?


Windows 2003 server, PHP 4.4.0.0

print_r(stream_get_transports());


Impossible je n'ai pas PHP 5.

Merci.
Je serai absent pendant 1 semaine, alors je ne répondrai pas tout de
suite... Mais n'hésitez pas à répondre qd meme !



Personne n'a une idée de ce qui peut se passer ?

Clément



Avatar
dwojylac.nospam
Clement wrote:

Bonjour,

J'utilise le code suivant :

$error_happened = false;
if(!$socket = fsockopen("127.0.0.1","6789",$errno,$errstr,10))


Bonjour

Ton timeout n'est pas un peu court. Tu as essayé en le ralongeant à 30
par exemple ?

--
Dominique
http://wojylac.free.fr

Avatar
Clement
Ton timeout n'est pas un peu court. Tu as essayé en le ralongeant à 30
par exemple ?


Oui, c'est en local alors c'est quasi instantané.
De plus, c'est fwrite qui fait un notice, pas fsockopen.
J'obtiens ce message exact :
"Notice: fwrite(): send of 72 bytes failed with errno=0 Une connexion
existante a dû être fermée par l'hôte distant. in
d:web_rootadministrationlibslib_operation.php on line 246"

C'est bizarre qu'il me parle de errno alors qu'on ne passe pas de errno à
fwrite, mais seulement à fsockopen. Est-ce que c'est le même ?

Merci pour vos réponses, en tout cas.
Clément.

Avatar
Clement
"Clement" a écrit dans le message de news:
43043a65$0$18672$
Ton timeout n'est pas un peu court. Tu as essayé en le ralongeant à 30
par exemple ?


Oui, c'est en local alors c'est quasi instantané.
De plus, c'est fwrite qui fait un notice, pas fsockopen.
J'obtiens ce message exact :
"Notice: fwrite(): send of 72 bytes failed with errno=0 Une connexion
existante a dû être fermée par l'hôte distant. in
d:web_rootadministrationlibslib_operation.php on line 246"

C'est bizarre qu'il me parle de errno alors qu'on ne passe pas de errno à
fwrite, mais seulement à fsockopen. Est-ce que c'est le même ?

Merci pour vos réponses, en tout cas.
Clément.


Bon, je suis passé sous PHP 5, et ca marche bien... Peut-etre etait-ce un
bug de php 4.4.0.0...


Avatar
Ninou
Clement wrote:
if(!$socket = fsockopen("127.0.0.1","6789",$errno,$errstr,10))



Si tu regardes le manuel php, tu verras que la fonction fsockopen renvoi
false quand elle ne marche pas. Ton code ici dit qu'il y a une erreur
quand php n'arrive pas a assigner la valeur renvoyée par fsockopen à
$socket or il arrive très bien à assigner la valeur false à $socket.
Tu devrais essayer de remplacer cette ligne par:
$socket = fsockopen("127.0.0.1","6789",$errno,$errstr,10);
if(!$socket)

Avatar
Clement
"Ninou" a écrit dans le message de news:
de5j0d$8om$
Clement wrote:
if(!$socket = fsockopen("127.0.0.1","6789",$errno,$errstr,10))



Si tu regardes le manuel php, tu verras que la fonction fsockopen renvoi
false quand elle ne marche pas. Ton code ici dit qu'il y a une erreur
quand php n'arrive pas a assigner la valeur renvoyée par fsockopen à
$socket or il arrive très bien à assigner la valeur false à $socket.
Tu devrais essayer de remplacer cette ligne par:
$socket = fsockopen("127.0.0.1","6789",$errno,$errstr,10);
if(!$socket)


Non, c'est exactement la même chose.
Essaye ceci :

$i = true;
if (!$i = false)
echo "affectation ratée ou l'affectation retourne la valeur de
l'opérande de gauche ?";

De toute façon, dans le doute, j'avais déjà essayé ta solution, et ca ne
changeait rien.
Et en changeant de version de PHP, mon probleme a été résolu.

Merci à tous vos réponses.
Clément