红联Linux门户
Linux帮助

linux的SOCKET编程的一个困扰问题~!!

发布时间:2008-09-29 14:29:57来源:红联作者:shlg_wfxy
listen_fd=socket(PF_INET,SOCK_STREAM,0);
if(listen_fd<0)
{
perror("can't socket");
exit(0);
}

memset(&srv_addr,0,1024);
srv_addr.sin_family=AF_INET;
srv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
srv_addr.sin_port=port;

ret=bind(listen_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));
if(ret==-1)
{
if(errno==EACCES)
printf("EACCES");
else if(errno==EADDRINUSE)
printf("EADDRINUSE");
else if(errno==EBADF)
printf("EBADF");
else if(errno==EINVAL)
printf("EINVAL");
else if(errno==ENOTSOCK)
printf("ENOTSOCK");
else
printf("unkown");
exit(0);
}


这段程序老是报“ENOTSOCK” 错误。那里错了?困扰了两天了!咳~!!!
文章评论

共有 5 条评论

  1. lqcone 于 2008-11-08 22:44:07发表:

    同意3楼的看法。如果楼主前边port直接定义为端口号的话在给srv_addr.sin_port赋值的时候必须要用函数honts()进行转化。。。。

  2. michrykitty 于 2008-11-06 15:42:01发表:

    估计是你使用IPv6 协议的吧

  3. shlg_wfxy 于 2008-09-29 21:12:14发表:

    把PF_INET改成AF_INET就可以了嘛?为什么啊?谢谢!

  4. zha2530 于 2008-09-29 18:23:55发表:

    srv_addr.sin_port=port;
    你的port怎么定义的?
    前面的你写出了一个字母。

  5. zha2530 于 2008-09-29 18:21:29发表:

    listen_fd=socket(AF_INET,SOCK_STREAM,0);