Для асинхронного подключения вы должны использовать следующие шаги:
socket(..., SOCK_NONBLOCK, ...)
connect(fd, ...)
0
, ни EINPROGRESS
, а затем прервать с ошибкой fd
не будет считаться готовым к выходу getsockopt(fd, SOL_SOCKET, SO_ERROR, ...)
Нет циклов - если вы не хотите обрабатывать EINTR
.
Если клиент запускается первым, вы должны увидеть ошибку ECONNREFUSED
на последнем шаге. Если это произойдет, закройте сокет и начните с начала.
Трудно сказать, что не так с вашим кодом, не видя больше деталей. Я полагаю, что вы не прерываете ошибки в своей check_socket
операции.
Я понял это. Проблема заключалась в том, что я не установил состояние конвейерного рисования для мультисэмплинга. Поэтому он считывал значение в буфере трафарета только для 1 из n выборок и, следовательно, затемнял вывод. Теперь работает нормально.