Bonjour (ou plutôt bonsoir pour les noctambules),
J'ai fini une version plutôt stable de mon serveur multiservices/multiprotocoles, et j'ai jugé le moment opportun pour vous remercier, tous les linuxfriens qui m'ont patiemment aidé sur les forums C, et vous montrer ce que j'ai codé avec mes doigts boudinés grâce à vos conseils avisés :)
Le serveur fait actuellement tourner un plugin HTTP presque compatible 1.0 (il manque encore POST et l'authentification basique), et marche sous GNU/Linux (évidemment), Mac OS X et Windows 2k/XP.
Je vous serais reconnaissant si vous pouviez malmener le Mammouth qui tourne sur http://michoko.homeip.net:8080/(...) (64 ko/s en upload), comme ça s'il plante sous la charge j'aurais un beau core dump à analyser :]
Vous pourrez aussi y télécharger les sources (sous licence GPL) si ça vous intéresse :)
Voilà, merci beaucoup à tous ceux qui prennent le temps d'aider les apprentis codeurs sur les forums :D
P.S: Il s'appelle Mammouth car il a toujours eu des tendances d'usine à gaz :]
# Date limite
Posté par JaguarWan . Évalué à 4.
[^] # Re: Date limite
Posté par Olivier Grisel (site web personnel) . Évalué à 6.
"""
bzip2: Data integrity error when decompressing.
Input file = (stdin), output file = (stdout)
It is possible that the compressed file(s) have become corrupted.
You can use the -tvv option to test integrity of such files.
You can use the `bzip2recover' program to attempt to recover
data from undamaged sections of corrupted files.
/bin/gtar: Child returned status 2
/bin/gtar: Statut d'erreur reporté d'erreurs précédentes.
"""
[^] # Bien vu...
Posté par JaguarWan . Évalué à 2.
En effet, je compile habituellement Mammouth avec seulement deux threads travailleurs de chaque sorte (MM_LIMIT_THREAD dans net/mm_net_def.h), mais là j'en avais prévu idix (juste au cas où ^_^').
Malheureusement, je n'avais pas prévu de mécanismes garantissant un envoi séquentiel pour les nouveaux streams, vu qu'empiriquement ça semblait bien marcher... Ce qui fait que vous recevez le fichier en entier, mais tout mélangé suivant la vélocité relative des 10 travailleurs d'écriture :]
Bon, bah ça fait un nouvel item sur ma todo list, en prévision d'une très prochaine version 0.2.1 :D
En attendant, il est conseillé de récupérer les sources sur tuxfamily ^_^'
[^] # Re: Date limite
Posté par Khâpin (site web personnel) . Évalué à 7.
il reste bloqué à 0%, mais après un Ctrl+C, le fichier téléchargé est correcte.
Même chose avec wget http://michoko.homeip.net:8080/mammoth.gif(...)
il se bloque à divers pourcentages, mais l'image est correcte (et les images sont identiques, quelque soit le pourcentage auquel le téléchargement s'est arrêté)
Du coup, ton site n'est pas visible avec lynx.
Autre chose bizarre, http://michoko.homeip.net:8080/a.html(...) me donne bien ta (très jolie) page 404, mais avec un code 200!
[^] # Re: Date limite
Posté par mrlem (site web personnel) . Évalué à 3.
Peut-être un problème dans l'entête HTTP annonçant la content-length qui permet à wget de dire où il en est ?
> il se bloque à divers pourcentages, mais l'image est correcte (et les images sont identiques, quelque soit le pourcentage auquel le téléchargement s'est arrêté)
Si la content-length n'est pas envoyée, et que le serveur ne prend pas l'initiative de fermer la connexion, le client doit être bien embêté :-P En même temps je fabule peut-être, vu que je ne peux accéder au site pour vérifier cette hypothèse...
[^] # Re: Date limite
Posté par JaguarWan . Évalué à 1.
Je mettrais un CGI pour contrôler ça dans la prochaine version :)
Pour wget, mon serveur ne ferme pas la connection tant que le client est là... Avec un telnet on voit qu'il envoie Content-Length et Content-Type, mais il doit manquer quelque chose pour que wget soit content car même dans des conditions "normales" il reste bloqué à 100%...
Vu que le serveur ne répondait plus beaucoup, je lui ai balancé un kill -11 pour voir s'il était en deadlock :)
Après lecture du core dump, il apparaît qu'il était tout simplement en stress intense, c'est impressionnant un LinuxFRisage :)
# Moi de même
Posté par Ummon . Évalué à 3.
Il n'est pas encore possible de le télécharger car ce n'est pour l'instant qu'une version alpha.
Vous pouvez essayé de le malmener ici :
http://pifou.myftp.org:8080/(...)
[^] # Re: Moi de même
Posté par JaguarWan . Évalué à 2.
Par contre j'ai voulu faire un telnet dessus et il ne répond pas quand je lance un bête GET / HTTP/1.1...
# Outils
Posté par dguihal . Évalué à 2.
[^] # Re: Outils
Posté par Yth (Mastodon) . Évalué à 5.
Yth.
[^] # Re: Outils
Posté par JaguarWan . Évalué à 4.
[^] # Re: Outils
Posté par Loïs Taulelle ࿋ (site web personnel) . Évalué à 1.
Comme siege ?
Proverbe Alien : Sauvez la terre ? Mangez des humains !
# Même chose en Java :-)
Posté par Olivier Serve (site web personnel) . Évalué à 2.
Pour le moment, je n'ai pas de 'virtualhost' HTTP, mais c'est prévu.
https://tifauv.homeip.net/svn/neutron/(...)
# Arf
Posté par JaguarWan . Évalué à 1.
A la lumière de netstat, on peut voit que le socket d'écoute est coincé en FIN_WAIT1...
pingouin@MICHOKO:~/MammouthServer-0.2/Mammouth$ netstat -t
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 MICHOKO.ma:microsoft-ds 192.168.0.4:32770 ESTABLISHED
tcp 0 16362 126.20.97-84.rev.g:8080 dhcp-83-219-107-17:3920 FIN_WAIT1
tcp 0 48 126.20.97-84.rev.ga:ssh AAmiens-152-1-38-:57363 ESTABLISHED
En attendant (cependant je ne crois pas que FIN_WAIT1 ait un timeout), je pense qu'on peut déclarer le Mammouth écrasé...
Les sources sont disponibles sur http://mammouth.tuxfamily.org(...)
[^] # Re: Arf
Posté par galactikboulay . Évalué à 1.
Même s'il te reste des connexions en attente de fermeture (en FIN_WAIT), tu pourras "rebinder" le port.
# PLouf ?
Posté par Vanzetti . Évalué à 2.
on est pas encore vendredi soir !!!
je veux voir ! je veux voir !!!
[^] # Re: PLouf ?
Posté par JaguarWan . Évalué à 2.
J'espère que cette erreur bizarre ne se reproduira pas...
[^] # Re: PLouf ?
Posté par Michel Pastor . Évalué à 3.
Pour corriger ce problème il faut positionner l'option SO_REUSEADDR sur le socket pour lui indiquer que ce n'est pas fatal. Un appel a setsockopt() juste après ta création du socket avec socket() devrait faire l'affaire:
int optval = 1;
int socket;
socket = socket(...);
if (setsockopt(socket, SO_REUSEADDR, &optval, sizeof(optval)) == -1)
// erreur
...
man setsockopt pour le reste ;)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.