【问题标题】:Bind return error 88绑定返回错误 88
【发布时间】:2015-01-24 10:58:49
【问题描述】:

我正在尝试用这个绑定一个套接字:

#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <errno.h>

int main()
{
    int fd,namelen,newfd;
    struct sockaddr_in sin = {AF_INET};

    if(fd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)==-1)
      printf("socket : %d\n",errno);

    if(bind(fd,(struct sockaddr *)&sin,sizeof(sin))==-1)
      printf("bind : %d\n",errno);
}

返回“bind : 88”,我认为这意味着 ENOTSOCK fd,真的不是套接字吗?还是 88 不是 ENOTSOCK?

【问题讨论】:

    标签: c sockets


    【解决方案1】:

    注意括号,实际上 fd = 0 在你的情况下。
    因为=== 之前被评估(参见C Operator Precedence),所以您的代码等效于fd = (socket(...) == -1)

    你应该替换

    if(fd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)==-1)
    

    if((fd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-05
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多