Created attachment 30383 [details]
_XSend()/_XReply() example, that describes the problem.
New implementation of _XSend() function provided in XLib 1.2.xx is not working the same style as in Xlib 1.1.xx.
Small get_version.c file attached describes the problem. The source code shown in this file tries to receive version information from any typical extension running on X Server. For example - from "DOUBLE-BUFFER" extension.
Extension is checked for availability and for Major Event Number using XQueryExtension() function.
The request is filled and is sent using _XSend() function.
The results are received using _XReply() function.
The results are printed using printf() function.
This example is definitely working in XOrg Server 7.2 with XLib 1.1.5, and is producing 'XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"' in XOrg Server 7.2 with XLib 1.2.2.
It is no matter what Extension to test. get_version.c can be modified for any other Extension that have QueryVersionReq/QueryVersionReply structures and appropriate request number published.
The result will be the same - working with XLib 1.1.xx and IO error with XLib 1.2.xx.
There may be an Xlib bug here, but your test program is wrong, so I'm not convinced. You can't send a request without using one of the GetReq family of macros in Xlib. When I fix your test program to use GetReq instead of _XSend, it completes successfully.
Your IO error did not occur in _XSend; it occurred in _XReply, because you didn't send a valid request, so we couldn't find the reply to return. XCB is a bit stricter about correctness here than Xlib is, but I've never seen real code get this wrong.