A może trochę inaczej: w przypadku powodzenia tak jak teraz, a w przypadku błędu ustawienie stanu na GG_STATE_ERROR (ew. GG_STATE_PRE_ERROR), użycie socketpair i wpisanie jednego bajtu (nieistotne jakiego, byle by szturchnąć pętlę zdarzeń). Wtedy doda się GG_STATE_ERROR do events.c#handlers i tam będzie rzucany odpowiedni event.

W ten sposób unikamy tworzenia zbędnych socketów a kod będzie bardziej przejrzysty.

Co o tym sądzisz?