当前位置:  开发笔记 > 编程语言 > 正文

为什么bind()返回SOCKET_ERROR

如何解决《为什么bind()返回SOCKET_ERROR》经验,为你挑选了1个好方法。

无:

MFC

ATL

使用纯C++,WSAGetLastError()返回10014 - 错误地址

我错过了什么/做错了什么?

代码图:

sockaddr_in sin;
SOCKET server;

if ((server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == SOCKET_ERROR)
{
    cerr << "Error: socket() return value == SOCKET_ERROR" << endl;
    WSACleanup();
    exit (EXIT_FAILURE);
}

sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(1234); //random port

if(bind(server, (sockaddr *)&sin, sizeof(sin) == SOCKET_ERROR))
{
    wError = WSAGetLastError();
    cerr << "Error: bin() return value == SOCKET_ERROR\n"
            "Details: " << wError << endl;
    WSACleanup();
    exit (EXIT_FAILURE);
}

paxdiablo.. 6

如果那是你的真实代码,那么在bind调用中你的括号位于错误的位置.最后两个中的一个应该在"sizeof(sin)"之后立即移动.

换句话说,改变它:

if(bind(server, (sockaddr *)&sin, sizeof(sin) == SOCKET_ERROR))

至:

if(bind(server, (sockaddr *)&sin, sizeof(sin)) == SOCKET_ERROR)

这是一个与套接字编程无关的细微C错误,但说明了在使用一种语言时需要注意的事项,这种语言很容易使语法正确的语句在语义上不正确.

你拥有它的方式,它计算" sizeof(sin) == SOCKET_ERROR"(总是假(零),因为sizeof(某事物)总是一个或多个,SOCKET_ERROR总是-1,至少对于WinSock而言).

然后它将此零作为bind()的第三个参数传递,这自然会抱怨你没有为地址结构提供足够大的大小.

而且,正因为如此,bind()返回一个非零错误代码,这就是你的if-block正在执行的原因.

一个非常微妙的.我对C语言的尊重仍然很高,尽管我已经使用了20多年 - 尊重"当我在塞伦盖蒂时我尊重狮子",而不是"我尊重我妻子的意见": - )



1> paxdiablo..:

如果那是你的真实代码,那么在bind调用中你的括号位于错误的位置.最后两个中的一个应该在"sizeof(sin)"之后立即移动.

换句话说,改变它:

if(bind(server, (sockaddr *)&sin, sizeof(sin) == SOCKET_ERROR))

至:

if(bind(server, (sockaddr *)&sin, sizeof(sin)) == SOCKET_ERROR)

这是一个与套接字编程无关的细微C错误,但说明了在使用一种语言时需要注意的事项,这种语言很容易使语法正确的语句在语义上不正确.

你拥有它的方式,它计算" sizeof(sin) == SOCKET_ERROR"(总是假(零),因为sizeof(某事物)总是一个或多个,SOCKET_ERROR总是-1,至少对于WinSock而言).

然后它将此零作为bind()的第三个参数传递,这自然会抱怨你没有为地址结构提供足够大的大小.

而且,正因为如此,bind()返回一个非零错误代码,这就是你的if-block正在执行的原因.

一个非常微妙的.我对C语言的尊重仍然很高,尽管我已经使用了20多年 - 尊重"当我在塞伦盖蒂时我尊重狮子",而不是"我尊重我妻子的意见": - )

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有