Jedyny sposób, jaki przychodzi mi do głowy to użycie socketpair(), wpisanie jednego z deskryptorów do gg_session->fd, drugiego gdzieś do gg_session->private_data i wysłanie bajtu po udanym lub nieudanym połączeniu. W ten sposób normalna pętla zdarzeń to obsłuży i w zależności od stanu gg_session->socket_error przejdzie do normalnego stanu (GG_STATE_READING_KEY, GG_STATE_SEND_HUB) albo obsłuży błąd tak jak po normalnym błędzie z connect().