>Ну вот если ты - иксовая программа, то почему при падении иксов
>тебе обязательно нужно грохнуться вслед вместе с изменениями в "открытых" файлах?
>Нельзя что-ли циклически раз в 0.5 секунды молча и терпеливо пытаться
>законнектиться назад и при появлении иксов восстать в прежней красе?
а это кто как напишет. При падении сервера или связи с ним, по факту ошибки нижележащего (т.е. внутри xlib) send'a или recv'a DeviceID (хэндл, возвращенный ф-ией XOpenDisplay) становится невалидным, и любая (почти) xlib'овская ф-ия вернет ошибку, что дескать неверный id подсунули (почти все иксовые ф-ии принимают его первым параметром).
а поскольку обработку ошибок общепринято делать в виде:
rc=functiontocall(...);
if(rc != success){
perror(success);
exit(1);
}
или вариации на тему, то и получаем мессадж типа "connection to display :0 is broken - explicit kill or server shutdown" (печатается perror'ом)
у тех, кто и такой проверки не делает, вообще в корку валитсясделать проверку на ошибки более интелектуальной - можно. но это сильно усложнит логику программы (попробуйте представить себе что для _каждой_ ф-ии, которую вы вызываете нужно предусмотреть правильный recovery path. у вас либо получится полный кошмар из операторов goto, или какой-нть слабопонятный фреймворк, в котором последовательность вызовов считывается в цикле из какого-нть массива и выполняется по одному вызову за проход цикла)
кроме того, если вы пишите не на raw X, а, скажем, на GTK+, то необходимо чтобы вся обработка ошибок прозрачно "пробрасывалась" через тулкит. насколько знаю, в большинстве тулкитов это не сделано.
пишите на raw X, и делайте обработку. никто кроме вашей программы не знает, что есть "правильное поведение" при обрыве. соберите инициализацию (XCreateSimpleWindow,XSelectInput и проч. лабуду вызываемую при старте проги в ф-ию инициализации и делайте обработку ошибок вида:
for(;;){
rc=functiontocall(devid, ...);
if(rc == success) break;
devid=initialize();
}
и буит вам щастье
(про переотрисовку только не забудьте)
\^P^/