> Как всётаки сделать таймаут на коннект?? с помощью > select'а, только без SetTimer > и ещо, я сделал сокет не блокируемым - DWORD dw = TRUE; > ioctlsocket(socket, FIONBIO, &dw); > > и теперь у меня всё пролетает не блокируясь и я не успеваю > отправить и сразу принять данные
делашь так :
SOCKET s = socket(....);
bind(...);
DWORD dw = TRUE;
> ioctlsocket(s, FIONBIO, &dw); connect(s, sockaddr, len);
select(0, NULL, &writefds, &timeout);
^^^^^^^
// witefds вернет тебе значение по которой ты узнаешь можно писать в сокет или нет
// timeout - переменная типа TIMEVAL, где собственно и укажешь тайиаут
// затем, если у тебя геморой с этим, то переведешь сокет в блокирующее состояние
dw = FALSE;
> ioctlsocket(s, FIONBIO, &dw);
вот и весь фокус. лучше всего select() использовать в отдельном потоке, придумай свой механизм обмена сообщениями между потоками и используй его. намного интерестно будет.
|