Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.3k views
in Technique[技术] by (71.8m points)

c - Bind return error 88

I'm trying to just bind a socket with this :

#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
",errno);

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

And that return "bind : 88", I think this mean ENOTSOCK fd, isn't a socket really ? or 88 isn't ENOTSOCK ?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Take care about parenthesis, in fact fd = 0 in your case.
Because == is evaluated before = (see C Operator Precedence), your code is equivalent to fd = (socket(...) == -1).

You should replace

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

with

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...