绑定返回错误88

时间:2015-01-24 10:58:49

标签: c sockets

我正试图用这个绑定套接字:

#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?

1 个答案:

答案 0 :(得分:5)

注意括号,事实上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)