Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Broken pipe

[es] :: C programiranje :: Broken pipe

[ Pregleda: 1271 | Odgovora: 13 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1300
*.dial.InfoSky.Net

Sajt: www.mycity.co.yu


Profil

icon Broken pipe29.06.2003. u 20:26

Imam problem sa funkcijom send().
U pitanju je jedan TCP client i server.
Server lepo radi, sve dok ne izgubi konekciju sa klijentom.

Dakle, recimo klijentu pukne veza, a server (normalno) to ne zna, jer se klijent nije normalno diskonektovao, već je njegova veza pukla.
Ako server pokuša nešto da pošalje klijentu, kroz socket, dešava se nešto čudno.
Na windows-u funkcija send() lepo vrati -1, što znači da je socket 'prso'.

Ali, na Linuxu, kada prvi put zovnem send() - funkcija vrati broj poslatih bajtova - kao da je sve u redu, kao da je poslao string !?!
Ako ponovo zovnem send() - načiću se u konzoli sa porukom : Broken pipe, i ceo program padne.
Nikad mi ne vraća -1.

Sors je isti i za Win i za UNIX, naravno na windowsu imam onu WSA inicijalizaciju...
U čemu je problem ?
29.06.2003. u 20:26 

Rapaic Rajko
programer, Grappolo
Bgd

Član broj: 4105
Poruke: 381
*.pexim.co.yu



Profil

icon Re: Broken pipe30.06.2003. u 10:05
Elem, ja sam laik za ovu temu, ali se meni cini da te zeza neki buffer. Kanda send() upise podatke u buffer (i vrati broj bajtova), pa tek na sledeci poziv send-a se vrsi stvarno slanje (flush) i tada cela stvar puca.
A mozda na Linux-u postoji citav jedan medjusloj (znaci, ne samo buffer) vise nego na Windows-u...
Poz

Rajko
30.06.2003. u 10:05 

Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1300
*.dial.InfoSky.Net

Sajt: www.mycity.co.yu


Profil

icon Re: Broken pipe30.06.2003. u 16:05
Bilo bi lepo kada bi se UNIX programeri javili, valjda na ovom forumu jos uvek ljudi pomazu jednim drugima?
30.06.2003. u 16:05 

filmil
Filip Miletić
Oce Technologies B.V., inženjer hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


Profil

icon Re: Broken pipe30.06.2003. u 17:22

Predraže,

opet patiš od nečitanja dokumentacije. :) Pročitaj stranu o funkciji send() iz dokumentacije za libc. Evo kako dotična počinje kod mene. (vidi dole) Pročitaj ostatak i valjda će se i sijalica upaliti.

Ne zaboravi, komanda M-x h i m libc RET je tvoj prijatelj. :) Tj. ako koristiš emacs. Nemam pojma kako se slično dobija u onom drugom editoru.

f

Citat:

File: libc.info, Node: Sending Data, Next: Receiving Data, Up: Transferring Data

Sending Data
............

The `send' function is declared in the header file `sys/socket.h'.
If your FLAGS argument is zero, you can just as well use `write'
instead of `send'; see *Note I/O Primitives::. If the socket was
connected but the connection has broken, you get a `SIGPIPE' signal for
any use of `send' or `write' (*note Miscellaneous Signals::).

30.06.2003. u 17:22 

Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1300
*.dial.InfoSky.Net

Sajt: www.mycity.co.yu


Profil

icon Re: Broken pipe30.06.2003. u 18:01
gde si nasao ovo?
odem na M-x, i sta onda?
ne vidim nista u vezi libc-a i funkcije send() ?
30.06.2003. u 18:01 

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.beograd-3.tehnicom.net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


Profil

icon Re: Broken pipe30.06.2003. u 18:14
Citat:
filmil:
Ne zaboravi, komanda M-x h i m libc RET je tvoj prijatelj. :) Tj. ako koristiš emacs. Nemam pojma kako se slično dobija u onom drugom editoru.


Sigurno je Filip mislio na C-h i m glibc RET ili M-x info RET m glibc RET.

Ako već ovo nije jasno, probaj npr. „samostalni info čitač“ sa „info glibc“.

U svakom slučaju, kada dovde stigneš, samo uradi „i send RET“, i u svakom slučaju ćeš dobiti isti rezultat, a to je ona stranica koju Filip pominje.

Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
30.06.2003. u 18:14 

Dragi Tata

Član broj: 1958
Poruke: 3894
199.171.112.*

Sajt: www.novetehnologije.com


Profil

icon Re: Broken pipe30.06.2003. u 18:16
Citat:
filmil:

Ne zaboravi, komanda M-x h i m libc RET je tvoj prijatelj.



Koliko kucanja da bi se dobilo F1. Strašno...
30.06.2003. u 18:16 

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.beograd-3.tehnicom.net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


Profil

icon Re: Broken pipe30.06.2003. u 18:22
Pa nemoj tako Nemanja, na ovaj način se izvrši i pretraga čitave pomoći na sistemu ;-)

Ako hoćeš kraće rešenje, samo odeš iznad „send(...)“ funkcije i kucaš C-h S

Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
30.06.2003. u 18:22 

filmil
Filip Miletić
Oce Technologies B.V., inženjer hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


Profil

icon Re: Broken pipe30.06.2003. u 18:31
Citat:
tOwk:
Sigurno je Filip mislio na C-h i m glibc RET ili M-x info RET m glibc RET.


Pardon. Dakle gore je citirana (ispravna) dobitna kombinacija by tOwk.

f

ps. Za Tatu: pretpostavka da čovek nije napravio prečicu... :>

... i posle se pitaju koji je najbolji editor.
30.06.2003. u 18:31 

Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1300
*.dial.InfoSky.Net

Sajt: www.mycity.co.yu


Profil

icon Re: Broken pipe01.07.2003. u 01:43
dakle, resen problem

ako neko u buducnosti ima ovaj problem, treba samo da
#include <signals.h>
i negde na pocetku programa uradi:
signal(SIGPIPE, SIG_IGN);

naravno, treba staviti to pod #ifdef ako pisete portabilnu aplikaciju

hvala svima na pomoci
01.07.2003. u 01:43 

filmil
Filip Miletić
Oce Technologies B.V., inženjer hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


Profil

icon Re: Broken pipe01.07.2003. u 10:27

Takođe bih pogledao i fleg MSG_NOSIGNAL koji isključuje SIGPIPE samo za funkcije send/recv, a ne globalno.

f
01.07.2003. u 10:27 

Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1300
*.dial.InfoSky.Net

Sajt: www.mycity.co.yu


Profil

icon Re: Broken pipe01.07.2003. u 15:27
ajd probacu... :)
deluje kao pravo resenje, bas mi to treba...
01.07.2003. u 15:27 

BORG
Aleksandar (Sasa) U.
*NIX System/Network Administrator
BL-RS

Član broj: 200
Poruke: 916
*.wireless.blic.net

ICQ: 46124351
Sajt: bitches.kicks-ass.net


Profil

icon Re: Broken pipe01.07.2003. u 20:08
Citat:
Predrag Damnjanovic:
dakle, resen problem

ako neko u buducnosti ima ovaj problem, treba samo da
#include <signals.h>
i negde na pocetku programa uradi:
signal(SIGPIPE, SIG_IGN);

naravno, treba staviti to pod #ifdef ako pisete portabilnu aplikaciju

hvala svima na pomoci


Ispravka ..

#include <signal.h>


With a PC, I always felt limited
by the software available.
On Unix, I am limited only by my knowledge.

--Peter J. Schoenster
01.07.2003. u 20:08 

Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1300
*.dial.InfoSky.Net

Sajt: www.mycity.co.yu


Profil

icon Re: Broken pipe01.07.2003. u 21:08
bolje je ovo drugo, da stavljas MSG_NOSIGNAL kod send() i recv()...
01.07.2003. u 21:08 

[es] :: C programiranje :: Broken pipe

[ Pregleda: 1271 | Odgovora: 13 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.