CAsyncSocket::Connect
От: Аноним  
Дата: 08.05.01 06:08
Оценка:
Получаю ошибку — 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();

Ну типа жду когда законектится — короче не дождался :((

Может глюк MFC или дело в том, что у меня NT ???
Re: CAsyncSocket::Connect
От: Scraam  
Дата: 10.05.01 17:13
Оценка:
Здравствуйте 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 для установки оного

У меня таже проблема. Пишу:

DWORD par = 1;
m_sSocket.IOCtl(FIONBIO, &par);

m_sSocket.Create();

if(m_sSocket.Connect("localhost", 4000))
MessageBox("Connect!!!");
else
MessageBox("error!");

Всегда выскакивает error! В чем беда?
Re: CAsyncSocket::Connect
От: Авдеев Дмитрий Дмитриевич  
Дата: 01.08.01 10:51
Оценка:
Здравствуйте 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.
Re[3]: CAsyncSocket::Connect
От: SergPas Украина  
Дата: 10.09.01 13:13
Оценка:
Здравствуйте Аноним, вы писали:

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!");

...

Ошибки WSAEWOULDBLOCK быть не должно
Re[4]: CAsyncSocket::Connect
От: samsung Россия  
Дата: 11.02.02 16:55
Оценка:
Здравствуйте 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.