郁闷的WSAEventSelect问题

EagleFew 2009-12-02 09:23:51
int nErrorCode;
SOCKET s;
SOCKADDR_IN addr;
WSAEVENT event[1];

s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)/*, NULL, 0, 0)* /;
event = WSACreateEvent();
WSAEventSelect(s, event[0], FD_CONNECT);

addr.sin_family = AF_INET;
addr.sin_port = htons(13801);
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

nErrorCode = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));
//nErrorCode = WaitForSingleObject((HANDLE)event, 5000);
nErrorCode = WSAWaitForMultipleEvents(1, event, FALSE, 5000, FALSE);
if ( nErrorCode == WSA_WAIT_EVENT_0 )
{
Caption = "connected sucessed!";
}

我本机的13801端口没有监听, 但是在connect 之后, WSAWaitForSingleObject 函数马上就返回了, 没有等待, 这是为什么呢?

那里写错了?
...全文
256 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
EagleFew 2009-12-04
  • 打赏
  • 举报
回复
没有新的说法了吗?
EagleFew 2009-12-02
  • 打赏
  • 举报
回复
看看还有什么说法, 然后结贴
EagleFew 2009-12-02
  • 打赏
  • 举报
回复
貌似是这样的, 多谢
尘雨 2009-12-02
  • 打赏
  • 举报
回复
nErrorCode = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));

首先判断nErrorCode,如果是-1,SOCKET_ERROR,那么就说明已经链接失败了,也就没必要去WAIT。

if (nErrorCode == SOCKET_ERROR)
{
// this connection has failed.
}
雪影 2009-12-02
  • 打赏
  • 举报
回复
问题解决结贴啊
EagleFew 2009-12-02
  • 打赏
  • 举报
回复
这样啊?

在循环里面一直连接?
试试, 多谢先
雪影 2009-12-02
  • 打赏
  • 举报
回复
查看connect得返回值啊,如果返回0,说明链接成功.

你可是使用循环,如果链接失败,就继续链接

nErrorCode = -1;
while(nErrorCode != 0)
nErrorCode = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR));
//下面的代码必须是链接成功才会执行
EagleFew 2009-12-02
  • 打赏
  • 举报
回复
那要如何办呢?

我想在连接的时候就知道是否连接成功了, 或者说, 什么时候才会有连接成功的通知呢?
雪影 2009-12-02
  • 打赏
  • 举报
回复
见2楼 msdn中的原话
只需要等到链接完成就会有通知,而没说必须是链接成功.
因此只要connect函数返回,event事件就会触发
EagleFew 2009-12-02
  • 打赏
  • 举报
回复
问题的关键是, 13801 这个端口没有没有监听, 服务器端都还没有打开啊, 也就是根本不可能连接成功的, 但是这里也是返回成功
雪影 2009-12-02
  • 打赏
  • 举报
回复
FD_CONNECT Wants to receive notification of a completed connection or multipoint join operation.
雪影 2009-12-02
  • 打赏
  • 举报
回复
正常啊,链接成功时触发event事件,WSAWaitForSingleObject函数当然要返回了.

这没什么问题吧?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧