一个SOCKET的错误

greatcat 2003-11-08 12:50:55
在LINUX环境下
这是什么错误:bind erro: Socket operation on non-socket


源码: 1 #include <stdio.h>
2 #include <string.h>
3 #include <unistd.h>
4 #include <sys/types.h>
5 #include <sys/socket.h>
6 #include <netinet/in.h>
7 #include <arpa/inet.h>
8
9 #define PORT 5200
10 #define CONNUM 2

12 main()
13 {
14 int listenfd,connectfd;
15 int opt=SO_REUSEADDR;
1 #include <stdio.h>
2 #include <string.h>
3 #include <unistd.h>
4 #include <sys/types.h>
5 #include <sys/socket.h>
6 #include <netinet/in.h>
7 #include <arpa/inet.h>
8
9 #define PORT 1111
10 #define CONNUM 2
11
12 main()
13 {
14 int listenfd,connectfd;
15 /*int opt=SO_REUSEADDR;
16 */
17 struct sockaddr_in server;
18 struct sockaddr_in client;
19 int sin_size;
20
21 /* create tcp socket*/
22 if ((listenfd = socket(AF_INET,SOCK_STREAM,0) == -1))
23 {
24 perror("creating socket failed!");
25 exit(1);
26 }
27
28 /*setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
29 */
30 bzero(&server,sizeof(server));
31 server.sin_family=AF_INET;
32 server.sin_port =htons(PORT);
33 server.sin_addr.s_addr=INADDR_ANY;
34
35 if(bind(listenfd,(struct sockaddr*)&server,sizeof(struct sockaddr))==-1)
36 {
37 perror("bind erro");
38 exit(1);
39 }
40
41 if(listen(listenfd,CONNUM)==-1)
42 {
43 perror("listen error!");
44 exit(1);
45 }
46
47 sin_size=sizeof(struct sockaddr_in);
48 if((connectfd=accept(listenfd,(struct sockaddr*)&client,&sin_size))==-1)
49 {
50 perror("accept error\n");
51 exit(1);
52 }
53
54 printf("connection from %s\n",inet_ntoa(client.sin_addr));
55 send(connectfd,"welcome to server\n",22,0);
56 close(connectfd);
57 close(listenfd);
58 }
59
60
61
62
...全文
89 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharkhuang 2003-11-11
  • 打赏
  • 举报
回复
你要把errno打出来!然后看man 就ok了!
applecjn 2003-11-11
  • 打赏
  • 举报
回复
学习
greatcat 2003-11-11
  • 打赏
  • 举报
回复
2 if ((listenfd = socket(AF_INET,SOCK_STREAM,0) == -1))
这一句写错了
少了括号
晚上散分,大家等等啊
SORRY
liao2001 2003-11-11
  • 打赏
  • 举报
回复
晕,原来有人已经回答过了,呵呵
liao2001 2003-11-11
  • 打赏
  • 举报
回复
仔细看看这一行:
if ((listenfd = socket(AF_INET,SOCK_STREAM,0) == -1))

=和==优先级导致。。。
msgsnd 2003-11-11
  • 打赏
  • 举报
回复
换个端口号,使过吗?
fierygnu 2003-11-11
  • 打赏
  • 举报
回复
赋值操作符的优先级最低。
greatcat 2003-11-09
  • 打赏
  • 举报
回复
来者有分啊
edwardpro 2003-11-09
  • 打赏
  • 举报
回复
哦,没有看清楚,乱说话了,对不起啊。
step_by_step 2003-11-09
  • 打赏
  • 举报
回复
楼主都说了这是linux平台上的socket程序,根本不用什么WSAStartup
sevencat 2003-11-09
  • 打赏
  • 举报
回复
老大,人家是LINUX下面...
ssbull 2003-11-09
  • 打赏
  • 举报
回复
你最好把listenfd定义成SOCKET类型
另外,你应该加上:
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
因为每个Winsock应用都要加载合适的Winsock DLL版本,如果没有加载,这个函数就会返回一个SOCKET_ERROR
edwardpro 2003-11-09
  • 打赏
  • 举报
回复
你没有WSAStartup(MAKEWORD(2,2),&wsa),这个怎么会成功?使用winsock必须先使用它,才可以socket(wsasocket) 和bind的.
step_by_step 2003-11-09
  • 打赏
  • 举报
回复
代码看起来没有问题,再想想
ssbull 2003-11-09
  • 打赏
  • 举报
回复
晚上来帮你看看
lichenzhou333 2003-11-09
  • 打赏
  • 举报
回复
server.sin_addr.s_addr=INADDR_ANY
这一句好象是这样:
server.sin_addr.s_add=(host->ip);
greatcat 2003-11-08
  • 打赏
  • 举报
回复
有人吗?
greatcat 2003-11-08
  • 打赏
  • 举报
回复
???

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧