Пытаюсь реализовать таймаут следующим образом:
| Код | //в неблокирующий режим int block = 1;//+ int err = -123; err = ioctlsocket (in_Socket, FIONBIO, (u_long FAR*) &block);// здесь возвращает 0, все норм
int ret = connect(in_Socket, in_Socks, socksLen);
int error = WSAGetLastError( ); if ( ( error == WSAEWOULDBLOCK ) || ( error == WSAEINPROGRESS ) ) { Log(IntToStr(error)); // ТУТ получаю WSAEWOULDBLOCK (10035), тоже непонятная тема //return -1; }
timeval time_out; time_out.tv_sec = 5; time_out.tv_usec = 0; //5 sek
fd_set setW, setE; FD_ZERO(&setW); FD_SET(in_Socket, &setW); FD_ZERO(&setE); FD_SET(in_Socket, &setE);
int ierr1=12; ierr1 = select(0, NULL, &setW, &setE, &time_out); if (FD_ISSET(in_Socket, &setW)) { // Connect granted retval = ret; }//if else if (FD_ISSET(in_Socket, &setE)) { return retval; // failed to connect }//else if else { return retval; // timeout }//else //entering non blocking block = 0;//+ ioctlsocket (in_Socket, FIONBIO, (u_long FAR*) &block);//+
|
А вот строчка:
| Код | int ret = connect(in_Socket, in_Socks, socksLen); Без всяких пауз сразу же возвращает "-1".
|
Дойдя до:
| Код | ierr1 = select(0, NULL, &setW, &setE, &time_out);
|
ierr1=1. Но паузы на ф-ии никакой нету. Сразу же идет дальше сюда:
| Код | if (FD_ISSET(in_Socket, &setW)) { // Connect granted retval = ret;
|
Хотя на самом деле никакого connect'a нету.
Что я делаю не так ? |