prijem ctrl-c pres soket

Michal Vojan mysutka na seznam.cz
Pátek Prosinec 9 16:35:28 CET 2005


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. 


takhle to mam napsany, vykoukal jsem to z vselijake dokumentace



int on=1;
int pid;

fcntl(server_sock_fd,F_SETOWN,getpid());
fcntl(server_sock_fd,F_SETFL,FASYNC);

(void) setsockopt(server_sock_fd, SOL_SOCKET, SO_OOBINLINE, (char *)&on,
sizeof on);

signal(SIGIO,&catchSIGIO);
signal(SIGURG,&catchSIGURG);    // tenhle signal by mel prijit pri prichodu
onech out-of-band dat

pid = -getpid();
if (ioctl(server_sock_fd, SIOCSPGRP, (char *) &pid) < 0) {
    perror("ioctl: SIOCSPGRP");
}




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?
Diky Michal


>> 
>> 
>> Zda se, ze se tam nejaka takova data odesilaji. Vi nekdo, jak se takova
>> data obsluhuji? Na neco se musi dat reagovat, nebot po stisku ctrl-c se
>> mi cely
>> program zastavi.  nebo ne?
>> 
> recv(int s, void *buf, size_t len, int flags), kde flags ma nastaveny
> bit konstantou MSG_OBB. Vice v manualu recv(2).
> 
> --Petr



Další informace o konferenci Linux