Нужна помощь Понимание ошибок протокола X11 - PullRequest
1 голос
/ 16 декабря 2010

Я только начал создавать минимальный 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"?

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

Ответы [ 2 ]

3 голосов
/ 16 декабря 2010

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

Приложение .

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

2 голосов
/ 16 декабря 2010

grep the source ...

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

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

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

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

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

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

...