2010-12-16 288 views
1

Je viens de commencer à construire un serveur X minimal pour Windows à partir de zéro. Pendant que je travaille à travers cela, je suis sûr que je vais rencontrer toutes sortes d'erreurs et de pépins pendant que je travaille sur les bugs et en apprendre plus sur le protocole.Besoin d'aide Comprendre les erreurs de protocole X11

Voici un exemple d'une erreur que j'ai vu imprimé par 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 

La principale signification opcode semble assez évident, mais où sont les codes d'erreur « X » défini? Quels sont les numéros de série des demandes et des flux de sortie en échec?

Sont-ils censés se correspondre? Par flux de sortie, cela signifie-t-il ce qui a été envoyé au xserver ou ce qui a été envoyé au xclient? Est-ce lié aux numéros de séquence?

+0

Etes-vous sûr de vouloir dire "serveur X" et non un "client X" le serveur est ce qui formate les affichages le client est le programme qui fait les demandes. –

+0

Oui. Bien que je travaille sur la création d'un serveur x, c'est le client qui signale le message d'erreur. –

Répondre

2

grep la source ...

dans libX11, XlibInt.c, _XPrintDefaultError(), vous pouvez trouver ce message d'erreur.

La plupart des éléments imprimés proviennent de l'événement error, probablement envoyé par votre serveur.

La série actuelle est dpy-> demande qui est en Xlibint.h:

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

à-dire la dernière demande de X qui a été envoyé. Cela peut ou peut ne pas être la même chose que la requête causant l'erreur. (event-> serial est censé être la requête à l'origine de l'erreur, mais votre serveur n'a peut-être pas obtenu ce droit)

Pour espérer coder un serveur X, je pense que vous creusez beaucoup dans le code source - les docs ne sont pas assez précis ou assez approfondis ... vraiment, vous pouvez aussi bien utiliser une partie du code existant, la licence est assez libérale.

+0

Jusqu'à présent, j'ai travaillé à partir d'une copie de 1992 de "Manual 0", mais vous avez probablement raison de devoir creuser dans le code à un moment donné. –

+0

ouais, ce vieux manuel est plutôt désuet. la plupart des fonctionnalités du serveur X ont été obsolètes par des remplacements modernes. –

3

Les codes d'erreur sont définis dans le chapitre de spécification du protocole X appelé Errors. Les autres éléments d'une réponse d'erreur sont définis dans le premier chapitre Protocol Formats. Les valeurs réelles et la disposition des messages d'erreur se trouvent dans le Errors section of the Protocol Encoding appendix. A partir du contenu de ce message, il semble que vous envoyez une réponse remplie de zéros lorsque le client n'attend pas de réponse - la plupart des requêtes envoyées au serveur X ne doivent pas recevoir de réponse via le protocole sauf si elles échoué.