WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  WSAEWOULDBLOCK или SockErr 10035

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   WSAEWOULDBLOCK или SockErr 10035
server_mouse опубликован 25-07-2001 09:45 MSK   Click Here to See the Profile for server_mouse   Click Here to Email server_mouse  
Делаю так:
AfxSocketInit();
SOCKET s=socket (AF_INET,SOCK_STREAM,IPPROTO_TCP);
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(SERVER_PORT);
sin.sin_addr.S_un.S_addr = inet_addr(SERVER_IP);
WSAAsyncSelect(s,hwnd,WM_USER+100,FD_READ|FD_CLOSE);

connect(s, (struct sockaddr *)&sin, sizeof(struct sockaddr));

////////////////
Конект возвращает SOCKET_ERROR (-1), WSAGetLastError() выдаёт сабж. В MSDN как-то очень размыто сказано о сабже, дескать ошибка не окончательная, просто то чего ты хочешь не может быть выполнено немедленно.
А конект на самом деле УСТАНАВЛИВАЕТСЯ.

Может это потому что я использовал MFC-инициализацию сокетов, а сами сокеты по-старинке?

purpe опубликован 25-07-2001 12:03 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
а как у тебя объявлены SERVER_PORT и SERVER_IP ?
purpe опубликован 25-07-2001 12:12 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
упс, недоглядел :)

что-то как-то эта строчечка вызывает подозрение:
WSAAsyncSelect(s,hwnd,WM_USER+100,FD_READ|FD_CLOSE);

по идее ты разрешаешь сокету только считывать и закрываться и больше НИЧИГО. тобишь коннект для данного сокета ты запрещаешь. Насколько я понимаю ента строчка в основном применима к серверу, который ожидаешь входящих запросов, а так как судя по всему у тебя клиентская программа, то попробуй просто временно убрать енту строчку и посмотреть на результаты.

ну если я не прав, то звиняй.

server_mouse опубликован 25-07-2001 15:13 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
>а как у тебя объявлены SERVER_PORT и SERVER_IP ?
#define SERVER_IP "192.0.10.60"
#define SERVER_PORT 5000

>по идее ты разрешаешь сокету только считывать и закрываться ...
IMHO эта ф-ция указывает при наступлении каких событий следует уведомлять об этом оконную процедуру.
Вот и MSDN говорит:
The Windows Sockets WSAAsyncSelect function requests Windows message-based notification of network events for a socket.

breeder опубликован 25-07-2001 15:42 MSK     Click Here to See the Profile for breeder  Click Here to Email breeder     
>Может это потому что я использовал MFC-инициализацию сокетов, а сами сокеты по-старинке?

Нет. Это потому что ты объявил свой сокет как неблокирующийся. connect не стал блокироваться до установки соединения а вернул ошибку. Когда это соедиение будет установлено (или будет выяснено что установить соединение невозможно) система твоему hwnd пришлет соотвествующее сообщение...

breeder опубликован 25-07-2001 15:48 MSK     Click Here to See the Profile for breeder  Click Here to Email breeder     
...если конечно ты добавишь в WSAAsyncSelect FD_CONNECT %)
purpe опубликован 25-07-2001 15:55 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
наверна придётся мне признать свою ошибочку :)
purpe опубликован 25-07-2001 16:06 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
блин ... ну вот спешиально взял и просмотрел несколько штук API-шных клиентов и ни в одном не нашёл WSAAsyncSelect :) в серверной части присутствует !

не, ну я так думаю - запустил в отдельном процессе функцию recv и пусть она себе читает. Или объясни большую необходимость Селекта :)

server_mouse опубликован 25-07-2001 16:17 MSK     Click Here to See the Profile for server_mouse  Click Here to Email server_mouse     
2breeder
Сенкс. Помогло.
Crazy Bear опубликован 04-12-2001 18:57 MSK     Click Here to See the Profile for Crazy Bear  Click Here to Email Crazy Bear     
Вообще-то следовало бы юзать WSAStartup в начале а кроме того WSAEventSelect гораздо круче не привязан к окну

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.