Получаю ошибку — WSAEWOULDBLOCK The socket is marked as nonblocking and the connection cannot be completed immediately.
Понятно всё кроме того где я могу изменить тип сокета с nonblocking. Подозреваю, что в CAsyncSocket::SetSockOpt и даже может быть это связано с этим флагом — SO_TYPE int Type of the socket , но дальнейшего описания я не нашёл.
Подскажите.
Re: CAsyncSocket::Connect
От:
Аноним
Дата:
08.05.01 12:34
Оценка:
Не хотит коннектится, постоянно получаю в ответ ошибку WSAEWOULDBLOCK The socket is marked as nonblocking and the connection cannot be completed immediately.
Может это и нормально если судить по документации, но скачал с www.microsoft.com/ пример как правильно работать с сокетами — а там всё также как у меня и опять не коннектится.
В MSDN написано, что типа ничего страшного — WSAEWOULDBLOCK как бы и не ошибка, а предупреждение и надо подождать немного, ну я поставил в классе сокета в обработчике OnConnect m_Event->SetEvent();
Ну типа жду когда законектится — короче не дождался :((
Здравствуйте antony, вы писали:
A>Получаю ошибку — WSAEWOULDBLOCK The socket is marked as nonblockin A>Понятно всё кроме того где я могу изменить тип сокета с nonblocking.
Есть такая функция у CAsyncSocket
BOOL IOCtl( long lCommand, DWORD* lpArgument );
так вот, если в параметре lCommand указать FIONBIO и в lpArgument передать указатель на DWORD в котором надо указать 0 если хотите, что бы снять blocking или 1 для установки оного
Re[2]: CAsyncSocket::Connect
От:
Аноним
Дата:
11.05.01 06:25
Оценка:
S>Есть такая функция у CAsyncSocket
S>BOOL IOCtl( long lCommand, DWORD* lpArgument );
S>так вот, если в параметре lCommand указать FIONBIO и в lpArgument передать указатель на DWORD в котором надо указать 0 если хотите, что бы снять blocking или 1 для установки оного
Спасибо.
Re[2]: CAsyncSocket::Connect
От:
Аноним
Дата:
29.07.01 19:56
Оценка:
A>>Получаю ошибку — WSAEWOULDBLOCK The socket is marked as nonblockin A>>Понятно всё кроме того где я могу изменить тип сокета с nonblocking. S>Есть такая функция у CAsyncSocket S>BOOL IOCtl( long lCommand, DWORD* lpArgument ); S>так вот, если в параметре lCommand указать FIONBIO и в lpArgument передать указатель на DWORD в котором надо указать 0 если хотите, что бы снять blocking или 1 для установки оного
Здравствуйте antony, вы писали:
A>Получаю ошибку — WSAEWOULDBLOCK The socket is marked as nonblocking and the connection cannot be completed immediately.
A>Понятно всё кроме того где я могу изменить тип сокета с nonblocking. Подозреваю, что в CAsyncSocket::SetSockOpt и даже может быть это связано с этим флагом — SO_TYPE int Type of the socket , но дальнейшего описания я не нашёл.
A>Подскажите.
Дело а том, что соединение не происходит мнгновенно, а так как вы используете CAsyncSocket, что подразумевает асинхронные операции с сокетами, тойсть возврат из функции происходит даже если вы еще не соединились. Соответственно и получаете ошибку. Для того, чтобы отловить момент, когда уже можно отравлять и принимать, нужно переопределить в производном классе либо OnSend, либо OnConnect.
Здравствуйте Аноним, вы писали:
A>>>Получаю ошибку — WSAEWOULDBLOCK The socket is marked as nonblockin A>>>Понятно всё кроме того где я могу изменить тип сокета с nonblocking. S>>Есть такая функция у CAsyncSocket S>>BOOL IOCtl( long lCommand, DWORD* lpArgument ); S>>так вот, если в параметре lCommand указать FIONBIO и в lpArgument передать указатель на DWORD в котором надо указать 0 если хотите, что бы снять blocking или 1 для установки оного
А>У меня таже проблема. Пишу:
А>DWORD par = 1; А>m_sSocket.IOCtl(FIONBIO, &par);
А>m_sSocket.Create();
А>if(m_sSocket.Connect("localhost", 4000)) А> MessageBox("Connect!!!"); А>else А> MessageBox("error!");
А>Всегда выскакивает error! В чем беда?
Попробуй так:
m_sSocket.Create();
m_sSocket.AsyncSelect(0)
DWORD par = 0;
m_sSocket.IOCtl(FIONBIO, &par);
int i=m_sSocket.Connect("localhost", 4000);
if(i!=WSAECONNREFUSED) MessageBox("error!");
Здравствуйте SergPas, Вы писали:
SP>Здравствуйте Аноним, вы писали:
A>>>>Получаю ошибку — WSAEWOULDBLOCK The socket is marked as nonblockin A>>>>Понятно всё кроме того где я могу изменить тип сокета с nonblocking. S>>>Есть такая функция у CAsyncSocket S>>>BOOL IOCtl( long lCommand, DWORD* lpArgument ); S>>>так вот, если в параметре lCommand указать FIONBIO и в lpArgument передать указатель на DWORD в котором надо указать 0 если хотите, что бы снять blocking или 1 для установки оного
А>>У меня таже проблема. Пишу:
А>>DWORD par = 1; А>>m_sSocket.IOCtl(FIONBIO, &par);
А>>m_sSocket.Create();
А>>if(m_sSocket.Connect("localhost", 4000)) А>> MessageBox("Connect!!!"); А>>else А>> MessageBox("error!");
А>>Всегда выскакивает error! В чем беда?
SP>Попробуй так:
SP>m_sSocket.Create(); SP>m_sSocket.AsyncSelect(0) SP>DWORD par = 0; SP>m_sSocket.IOCtl(FIONBIO, &par);
SP>int i=m_sSocket.Connect("localhost", 4000); SP>if(i!=WSAECONNREFUSED) MessageBox("error!");
SP>...
SP>Ошибки WSAEWOULDBLOCK быть не должно
я так тоже попробовал но теперь выдаёт сообщение
Debug Accertion Failed
file sockcore.cpp
line 333
for more .... see visual c documentation
abort retry