Нужна помощь в понимании ошибок протокола X11

Я только что начал создавать минимальный X-сервер для Windows с нуля. Когда я буду работать над ним, я уверен, что столкнусь со всевозможными ошибками и сбоями, когда буду исправлять ошибки и узнавать больше о протоколе.

Вот пример ошибки, которую я видел напечатанной клиентом:

X Error of failed request:  0
  Major opcode of failed request:  0 ()
  Serial number of failed request:  0
  Current serial number in output stream:  3

Основное значение кода операции кажется довольно очевидным, но где определены коды «X Error»?

Каковы серийные номера неудачного запроса и выходного потока? Должны ли они соответствовать друг другу? Под выходным потоком подразумевается, что было отправлено на xserver или что было отправлено на xclient? Это связано с порядковыми номерами?


person Jason Champion    schedule 16.12.2010    source источник
comment
Вы уверены, что имеете в виду X-сервер, а не X-клиент? Сервер - это то, что форматирует дисплеи, а клиент - это программа, выполняющая запросы.   -  person James Anderson    schedule 16.12.2010
comment
да. Хотя я работаю над созданием x-сервера, именно клиент сообщает об ошибке.   -  person Jason Champion    schedule 16.12.2010


Ответы (2)


скопируй источник...

в libX11, XlibInt.c, _XPrintDefaultError() вы можете найти это сообщение об ошибке.

Большая часть того, что напечатано, относится к событию ошибки, которое предположительно отправляется вашим сервером.

Текущий серийный номер — dpy->request, который находится в Xlibint.h:

 unsigned long request;  /* sequence number of last request. */

то есть последний отправленный запрос X. Это может быть или не быть таким же, как запрос, вызвавший ошибку. (событие->serial должно быть запросом, вызвавшим ошибку, но ваш сервер, возможно, не понял это правильно)

Чтобы написать код X-сервера, я думаю, вам придется много копаться в исходном коде - документы недостаточно точны или тщательны ... на самом деле, вы также можете использовать часть существующего кода, лицензия достаточно либеральна. .

person Havoc P    schedule 16.12.2010
comment
До сих пор я работал с копией Manual 0 1992 года, но вы, вероятно, правы в том, что в какой-то момент вам нужно копаться в коде. - person Jason Champion; 17.12.2010
comment
да, этот старый мануал сильно устарел. многие функции X-сервера устарели из-за современных замен. - person Havoc P; 17.12.2010

Коды ошибок определены в главе спецификации протокола X под названием Ошибки. Другие элементы ответа об ошибке определены в первой главе Форматы протоколов. Фактические значения и формат сообщений об ошибках можно найти в Раздел Ошибки приложения Кодировка протокола.

Из содержимого этого сообщения видно, что вы отправляете ответ, заполненный нулями, когда клиент не ожидает ответа - большинство запросов к X-серверу не должны получать ответ, отправленный обратно через протокол, если они не завершились неудачно.

person alanc    schedule 16.12.2010