Автор
|
Тема: WSAEWOULDBLOCK или SockErr 10035
|
server_mouse |
опубликован 25-07-2001 09:45 MSK
Делаю так: 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
а как у тебя объявлены SERVER_PORT и SERVER_IP ?
|
purpe
|
опубликован 25-07-2001 12:12 MSK
упс, недоглядел :)что-то как-то эта строчечка вызывает подозрение: WSAAsyncSelect(s,hwnd,WM_USER+100,FD_READ|FD_CLOSE); по идее ты разрешаешь сокету только считывать и закрываться и больше НИЧИГО. тобишь коннект для данного сокета ты запрещаешь. Насколько я понимаю ента строчка в основном применима к серверу, который ожидаешь входящих запросов, а так как судя по всему у тебя клиентская программа, то попробуй просто временно убрать енту строчку и посмотреть на результаты. ну если я не прав, то звиняй. |
server_mouse
|
опубликован 25-07-2001 15:13 MSK
>а как у тебя объявлены 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
>Может это потому что я использовал MFC-инициализацию сокетов, а сами сокеты по-старинке?Нет. Это потому что ты объявил свой сокет как неблокирующийся. connect не стал блокироваться до установки соединения а вернул ошибку. Когда это соедиение будет установлено (или будет выяснено что установить соединение невозможно) система твоему hwnd пришлет соотвествующее сообщение... |
breeder
|
опубликован 25-07-2001 15:48 MSK
...если конечно ты добавишь в WSAAsyncSelect FD_CONNECT %) |
purpe
|
опубликован 25-07-2001 15:55 MSK
наверна придётся мне признать свою ошибочку :)
|
purpe
|
опубликован 25-07-2001 16:06 MSK
блин ... ну вот спешиально взял и просмотрел несколько штук API-шных клиентов и ни в одном не нашёл WSAAsyncSelect :) в серверной части присутствует !не, ну я так думаю - запустил в отдельном процессе функцию recv и пусть она себе читает. Или объясни большую необходимость Селекта :) |
server_mouse
|
опубликован 25-07-2001 16:17 MSK
2breeder Сенкс. Помогло. |
Crazy Bear
|
опубликован 04-12-2001 18:57 MSK
Вообще-то следовало бы юзать WSAStartup в начале а кроме того WSAEventSelect гораздо круче не привязан к окну |