Ik heb in C++ een server geschreven en af en toe 'crasht' die met de mededeling: broken pipe (ook wel eens met segmentation fault, maar dat is een ander verhaal). Waardoor wordt deze error veroorzaakt?
http://www.die.net/doc/linux/man/man7/signal.7.html
"Broken pipe: write to pipe with no readers".
Waarschijnlijk schrijf je naar een pipe waar nooit uit word gelezen? Als dat niet zo is, kijk eens wat er gebeurd als je SIGPIPE negeert.
Anyway... het blijft gokken zo zonder enige omschrijving en/of code
"Broken pipe: write to pipe with no readers".
Waarschijnlijk schrijf je naar een pipe waar nooit uit word gelezen? Als dat niet zo is, kijk eens wat er gebeurd als je SIGPIPE negeert.
Anyway... het blijft gokken zo zonder enige omschrijving en/of code
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Ik had geen idee wat broken pipe betekende, dus om de juiste code te posten was een beetje lastig.
Ik read/write naar sockets en ik write naar cerr en cout. Kan schrijven naar cerr/cout dit signaal veroorzaken?
Ik read/write naar sockets en ik write naar cerr en cout. Kan schrijven naar cerr/cout dit signaal veroorzaken?
[ Voor 50% gewijzigd door Olaf van der Spek op 25-05-2003 20:16 ]
Naar cerr en cout mag dat niet veroorzaken. Als je met sockets in de weer bent kan ik me voorstellen dat je daar ergens een foutje hebt gemaakt. Maar als je opgeeft dat het signal SIGPIPE genegeert moet worden, werkt je server dan nog steeds?
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Ik heb ook geen idee hoe ik signalen kan negeren, dus ik kan het niet even snel uitproberen. Maar welke socket-related event genereerd SIGPIPE dan?
[ Voor 24% gewijzigd door Olaf van der Spek op 25-05-2003 20:18 ]
Als de verbinding is verbroken, en je schrijft naar de socket, of je probeert er van te lezen dan krijg je dus dat broken pipe signal. De standaard actie die word ondernomen is het programma beeindigen. M.b.v. signal() (zie man 2 signal en man 7 signal) kan je actie ondernemen als dit gebeurt, of zelfs de signal geheel negeren als je op een andere manier al dedecteerd of de connectie nog bestaat of niet.OlafvdSpek schreef op 25 mei 2003 @ 20:16:
Ik heb ook geen idee hoe ik signalen kan negeren, dus ik kan het niet even snel uitproberen. Maar welke socket-related event genereerd SIGPIPE dan?
Maak je gebruik van write()? Deze geeft een EPIPE terug als er niet geschreven kan worden naar de socket. Echter voordat write() returnt en de EPIPE teruggeeft krijg je de SIGPIPE al, waardoor het proces word beeindigt, en je de EPIPE niet kan afvangen.
En wat google me ook nog gaf
http://www.experts-exchan...nguages/C/Q_10033384.html
[ Voor 7% gewijzigd door Creepy op 25-05-2003 21:10 ]
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Nee, ik gebruik send. Maar waarom wordt er een signal gestuurd in plaats van gewoon via de return value aan te geven dat er iets fout is gegaan?
Ik dacht dat er op een gegeven moment ook een SIGCHLD signaal komt als verbinding wordt verbroken.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Alleen als je multi-threading zonder thread pooling gebruikt. Ik gebruik geen multi-threading.SIGCHLD: Child stopped or terminated
Weet iemand toevallig ook hoe ik deze server kan laten draaien vanuit een SSH sessie zelfs nadat ik de SSH sessie zelf afsluit?
[ Voor 31% gewijzigd door Olaf van der Spek op 26-05-2003 10:07 ]
Das makkelijkOlafvdSpek schreef op 26 May 2003 @ 09:36:
[...]
Alleen als je multi-threading zonder thread pooling gebruikt. Ik gebruik geen multi-threading.
Weet iemand toevallig ook hoe ik deze server kan laten draaien vanuit een SSH sessie zelfs nadat ik de SSH sessie zelf afsluit?
nohup /mijn/server/executable/hier &
M.b.v. fork o.i.d. moet het ook mogelijk zijn om je server proces zichzelf in de background te laten zetten... hoe dat moet weet ik echter niet...
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Deze heb ik es gebruikt om een daemon te creëren voor linux:Creepy schreef op 26 May 2003 @ 15:26:
M.b.v. fork o.i.d. moet het ook mogelijk zijn om je server proces zichzelf in de background te laten zetten... hoe dat moet weet ik echter niet...
http://www.linuxjournal.com/article.php?sid=2335
Cool.. ik was net opzoek naar dit soort info. ThanxGlimi schreef op 26 mei 2003 @ 15:44:
[...]
Deze heb ik es gebruikt om een daemon te creëren voor linux:
http://www.linuxjournal.com/article.php?sid=2335
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Wat voor server ben je aan het schrijven?
Inderdaad zeer handige info, alleen het model dat ik gebruik (single-threading) stond er niet in.
Een deamon om LCD's aan te sturen (ala lcdproc, zie lcdproc.omnipotent.net). In eerste instantie gaat mijn deamon met pipes werken i.p.v. TCP, maar ik ben wel van plan een TCP plugin te schrijven zodat je eventueel ook remote het LCD kan aansturen.OlafvdSpek schreef op 26 mei 2003 @ 17:57:
[...]
Wat voor server ben je aan het schrijven?
Inderdaad zeer handige info, alleen het model dat ik gebruik (single-threading) stond er niet in.
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Ik heb een iets nettere manier gevonden om die pijpen heel te houden: geef MSG_NOSIGNAL mee aan recv en send.
Nice! Die heb ik over het hoofd gezien.OlafvdSpek schreef op 27 May 2003 @ 00:04:
Ik heb een iets nettere manier gevonden om die pijpen heel te houden: geef MSG_NOSIGNAL mee aan recv en send.
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Doordat je schrijft naar een socket waar aan de andere kant geen listener meer voor is. MAW : De andere kant heeft de connectie gesloten.OlafvdSpek schreef op 25 May 2003 @ 16:10:
Ik heb in C++ een server geschreven en af en toe 'crasht' die met de mededeling: broken pipe (ook wel eens met segmentation fault, maar dat is een ander verhaal). Waardoor wordt deze error veroorzaakt?
Normaliter krijg je dan een SIGPIPE, maar met de juiste opties aan send() kun je ervoor zorgen dat send() een EPIPE teruggeeft. Een sigpipe is in ieder geval het teken om je connectie te sluiten
man 3 daemon()OlafvdSpek schreef op 26 May 2003 @ 09:36:
[...]
Weet iemand toevallig ook hoe ik deze server kan laten draaien vanuit een SSH sessie zelfs nadat ik de SSH sessie zelf afsluit?
igmar schreef op 27 May 2003 @ 11:49:
man 3 daemon()
code:
1
2
| # man 3 daemon()
-bash: syntax error near unexpected token `(' |
;->
Bedankt voor deze hint, maar zoals je had kunnen lezen waren beide problemen al opgelost.
Pagina: 1