prijem ctrl-c pres soket
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Sobota Prosinec 10 22:24:41 CET 2005
On Fri, 9 Dec 2005, Michal Vojan wrote:
> tomu bych jeste rozumel. mozna jsem to spatne napsal, ja bych se rad
> dozvedel, kde se veme ten podnet, ten signal, na ktery mam reagovat, proc
> neprichazi.
[...]
> (void) setsockopt(server_sock_fd, SOL_SOCKET, SO_OOBINLINE, (char *)&on,
> sizeof on);
Myslite, ze je nejak moc smysluplne chytat OOB data pres signal, kdyz jste
timto nastavil, aby se poslusne zaradila do fronty mezi normalni data?
> signal(SIGIO,&catchSIGIO);
> signal(SIGURG,&catchSIGURG); // tenhle signal by mel prijit pri prichodu
> onech out-of-band dat
Nastavovat handlery signaly byste mel predtim, nez aktivujete vyvolavani
toho signalu (mluvim o nastaveni FASYNC...tedy ono by se tomu melo rikat
spis O_ASYNC, FASYNC je takova bsdickova manyra, a F_SETOWN).
Take byste mel spis pouzit sigaction().
> pid = -getpid();
> if (ioctl(server_sock_fd, SIOCSPGRP, (char *) &pid) < 0) {
> perror("ioctl: SIOCSPGRP");
> }
Tohle je trochu nadbytecne, kdyz uz tam mate fcntl(...F_SETFL...), ne?
Hlavne to tim otocite na hlavu, protoze nejdriv nastavujete proces a ted
skupinu procesu (tedy za predpokladu, ze zrovna tenhle proces se
osamostatni a zridil si skupinu, ktera ma prave cislo odpovidajici jeho
pidu).
> problem je, ze zadnej signal mi neprijde. kdyz na ten program pustim strace
> tak tam vidim tohle
> read(6, "\377", 1) = 1
> read(6, "\364", 1) = 1
> read(6, "\377", 1) = 1
> read(6, "\375", 1) = 1
> read(6, "\6", 1) = 1
>
> tedy ta sekvence prijde. tady se to ale zastavi a ceka a teprve az kdyz
> zmacknu enter, tak to bezi dal. signal nikde zadny.
> co tomu tedy jeste chybi?
Treba tomu chybi to, aby klient (rozumej telnet) vubec poslal nejaka
urgentni (= OOB) data. Viz telnet(1).
U SIGIO nevim, ale mam jiste podezreni, ze by nemuselo chodit, kdyz uz
proces na prislusnem deskriptoru sedi a ceka na prislusnou udalost
(tedy napriklad ceka na prichozi data a je uvnitr volani read()).
Ale treba se mylim.
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."
Další informace o konferenci Linux