|
Тема
|
izprashtane na danni kum multiple forked sockets
|
|
Автор |
azo (Azazel) |
Публикувано | 10.09.03 18:40 |
|
Zdraveite ..purvo iskam da se izvinia, che ne pisha na kirilica, no v momenta niamam takava vuzmojnost.
A sega za problema ...
pisha si IRC botche ...fork-nah DCC CHAT konekciite (user prashta request kum bot-a i bot-a se connectva kum dadeno ip i port)
vuprosa e ...
ako imam poveche ot edin user-a, koito polzvat DCC CHAT ..i ako iskam da izpratia na _VSICHKI_ niakakvi danni ...kak da stane? shte paste-na malko src:
my $dccpid = fork();
if($dccpid == 0) { # child
my $dccs = IO::Socket::INET->new(PeerAddr => $dccserver, PeerPort => $dccport, Proto => "tcp");
while(my $dr = <$dccs>) {
$dccs->send("Holla!\n") if($dr =~ /^HI$/i)
}
}
taka ...tova raboti za edin klient (ako napishe "hi")
no da rechem, che iskam ako klient-a napishe "hi" ...tova neshto da se izprati kum vsichki fork-nati sockets
tova e ..nadiavam se da ima niakoi, koito da mi pomogne ili pone da me _NASOCHI_ zashtoto v 3 IRC mreji udarih na kamyk ;-)
--- Life would be so much easier if we could just take a look at its source code .. ---
| |
Тема
|
Re: izprashtane na danni kum multiple forked sockets
[re: azo]
|
|
Автор | sofit (Нерегистриран) |
Публикувано | 12.09.03 10:36 |
|
Здравей azo,
Защо изобщо fork-ваш като правиш нови връзки? Защо не ги направиш "Non-blocking" (такива, които при while (<>) {} не биха ти задържали програмата). Така може да вкараш всяка нова връзка в един масив и да имаш контрол над всички сокети (и после просто ще циклиш всички елементи от масива и ще пращаш към всеки даденото съобщение). А ако _наистина_ толкова важно да fork-ваш, пиши отново тук, надявам се, че някой ще успее да ти отговори.
Надявам се, че това помогна.
| |
Тема
|
Re: izprashtane na danni kum multiple forked sockets
[re: sofit]
|
|
Автор |
azo (Azazel) |
Публикувано | 13.09.03 20:31 |
|
vajno e da fork-vam, zashtoto ako ne se fork-vat DCC konekciite ne moje da se zakachi poveche ot 1 chovek po dcc. Inache si misleh za sushtata ideia ..no naistina triabva da fork-vam;-)
tnx za otgovora vse pak :)
--- Life would be so much easier if we could just take a look at its source code .. ---
| |
Тема
|
Re: izprashtane na danni kum multiple forked socke
[re: azo]
|
|
Автор | Sofit (Нерегистриран) |
Публикувано | 14.09.03 00:38 |
|
Mi hubawo, fork-vaj si i gi pazi w edin array nowite new created sockets i foreach-vaj i pishi kym tezi referencii w array-a i gotowo. Ili naprawo prawi socket-a kato 4ast ot array-a $array[$id] = IO::Socket...
| |
Тема
|
Re: izprashtane na danni kum multiple forked socke
[re: azo]
|
|
Автор | pencho666 (Нерегистриран) |
Публикувано | 30.10.03 14:26 |
|
Ima mnogo nachini tova da se napravi. Ot nestabilnite i zaviseshti ot operacionnata sistema "podeleni" failovi descriptori, do non-blocking IO i cikli.
Mnogo lesno mojesh da napravish slednoto neshto:
Da otvariash nov Socket v promenliva ot masiv push(@dcss,IO::Socket::INET......), da go markirash kato $dcss[-1]->blocking(0); i da si vartish cikli bez fork. Kakto i za chetene. Niamash blokirane, niamash izchakvane.
Drug mehanizam e da imash proces koito da ima FD-ta mejdi podprocesite (naprimer da ima otvoreni PIPES), i kogato iskash da izpratish neshto na vsichki pristignalo pri child 1, to go kopira na PIPE-to na komunikacionniat proces, a toi go razmnojava kam vsichki. Tova shte iziskva s poll ili select ot vreme na vreme da gledash po pipe-to dali ne e pristignala informacia (forma na nonblocking IO).
Treti nachin e da otvariash zatvariash tcp sesiite nanovo. Mojesh da imash shared memory mejdu procesite kadeto da kopirash informaciata, i s kill (niakakav specialen signal) da izvestish vsichki childs da go prochetat ot tam.
Moje mnogo neshta, kolkoto fantazia imash. No non-blocking IO-to e nai prosto :)
| |
|
|
|
|