Hai bisogno di aiuto per capire gli errori di protocollo X11
Domanda
Ho appena iniziato la costruzione di un server minimo X per Windows da zero. Mentre lavoro attraverso di essa sono sicuro che corro in tutti i tipi di errori e difetti, come io lavoro gli insetti fuori e conoscere meglio il protocollo.
Ecco un esempio di un errore che ho visto stampato da un client:
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
Il principale significato codice operativo sembra abbastanza ovvio, ma dove sono le "X errore" codici definiti?
Quali sono i numeri di serie del flusso di richiesta e di uscita fallito? Sono questi dovrebbero abbinare tra di loro? Con flusso di output, vuol dire che ciò che è stato inviato al server X o quello che è stato inviato al XCLIENT? È questo relativi a numeri di sequenza?
Soluzione
grep la fonte ...
in libX11, XlibInt.c, _XPrintDefaultError () potete trovare questo messaggio di errore.
La maggior parte di ciò che è stampato è da l'evento di errore, che è presumibilmente inviato dal server.
La serie attuale è dpy-> richiesta che è in Xlibint.h:
unsigned long request; /* sequence number of last request. */
vale a dire. l'ultima richiesta X che è stato inviato. Questo può o non può essere la stessa richiesta che causa l'errore. (Event-> di serie si suppone che sia la richiesta che ha causato l'errore, ma il server non può avere ottenuto questo diritto)
Per la speranza di codice di un server X Penso che sarete scavando nel codice sorgente molto - la documentazione non sono abbastanza precisi o approfondita ... davvero, si può anche utilizzare una parte del codice esistente, la licenza è abbastanza liberale.
Altri suggerimenti
I codici di errore sono definiti nella specifica X protocollo capitolo chiamato errori . Le altre voci di una risposta di errore sono definiti nel primo capitolo protocollo Formati . I valori reali e il layout dei messaggi di errore si trovano nel errori della protocollo di codifica appendice .
Da contenuto di quel messaggio anche se sembra si sta inviando una risposta piena di zeri quando il cliente non si aspetta una risposta - la maggior parte delle richieste al server X non dovrebbe ottenere una risposta inviato indietro attraverso il protocollo a meno che non sono riusciti .