c++ - 套接字 API :Socket operation on non-socket

标签 c++ c sockets network-programming bsd

您好,我在使用套接字 API 编写服务器时遇到问题。我总是收到此错误:“非套接字上的套接字操作”

struct sockaddr_in addr;
int port = 10000;
int sd;

memset((char *) &addr,0, sizeof(addr));
addr.sin_family = PF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htonl((u_short)port);

if ((sd = socket(PF_INET, SOCK_STREAM, 0) < 0)) {

    printf("socket failed");
}

if(bind(sd, (struct sockaddr *)&addr, sizeof(addr)) != 0)
{
    printf(strerror(errno));
}

close(sd);


return 0;}

最佳答案

行:

if ((sd = socket(PF_INET, SOCK_STREAM, 0) < 0)) {

不会按照你的想法去做。如果仔细观察括号的位置(并记住 < 运算符的优先级高于 = ),您会注意到实际上是在分配 sd。表达式的值 socket(PF_INET, SOCK_STREAM, 0) < 0 .

简而言之,sd最有可能最终包含值 0,因为这是上面表达式通常计算的结果。这解释了“非套接字上的套接字操作”错误;它真的不是 socket 。

所以这一行应该是:

if ((sd = socket(PF_INET, SOCK_STREAM, 0)) < 0) {

请注意我是如何将右括号左移两个标记的。

关于c++ - 套接字 API :Socket operation on non-socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28754757/

相关文章:

c++ - 在 C++ 中使用枚举作为数组索引

c++ - 编译时检查连续函数调用

c - 声明为指针的函数

c - 简单测试程序中无法解释的 malloc 调用 : malloc project

c++ - 有没有办法将两个 QWidget 连接或锚定在一起?

c++ - 在C++中将json值转换为int

c - 如何在C中生成一次范围内的随机数?

java - 通过网络将 RSA 公钥从 C 发送到 Java

android - 如何从android中的listview中的socket io检索数据

c# - 为什么将 SocketOptionName.HeaderIncluded 设置为 true 时会出现 SocketException 10022?