免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1702 | 回复: 0
打印 上一主题 下一主题

[网络] raw socket(菜鸟入门)求知道! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-17 10:05 |只看该作者 |倒序浏览
  1. #include<stdio.h>
  2. #include "tcpnc.h"
  3. #define BACKLOG 10
  4. #define STDIN 0
  5. int main(int argc,char *argv[])
  6. {
  7.         FILE *fp;
  8.         char buf[296];        //packet buffer
  9.         char buff[256];        //account buffer
  10.         char send_str[256];        //the content of sending
  11.         char *str;
  12.         int recvbytes;
  13.         int sockfd,client_fd;
  14.         fd_set rfd_set,wfd_set,efd_set;
  15.         struct timeval timeout;
  16.         int ret;
  17.         if((sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_TCPNC))<0)
  18.         {
  19.                 printf("socket error!");
  20.                 exit(1);
  21.         }
  22.         struct sockaddr_in my_addr,remote_addr;
  23.         int sin_size;
  24.         memset(&my_addr,0,sizeof(my_addr));
  25.         //bzero(&my_addr,sizeof(struct sockaddr_in));
  26.         my_addr.sin_family=AF_INET;
  27.         my_addr.sin_port=htons(SERVERPORT);
  28.         //my_addr.sin_addr.s_addr=htonl(INADDR_ANY);
  29.         inet_aton("127.0.0.1",&my_addr.sin_addr);
  30.         //my_addr.sin_addr.s_addr=inet_addr("200.200.30.42");
  31.         const int on=1;
  32.         if(setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on))==-1)
  33.         {
  34.                 printf("setsockopt error!");
  35.                 exit(0);
  36.         }
  37.         sin_size=sizeof(my_addr);
  38.         if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
  39.         {
  40.                 printf("bind error!");
  41.                 exit(1);
  42.         }
  43.         int lis=listen(sockfd,BACKLOG);
  44.         if(lis==-1)
  45.         {
  46.                 printf("listen error!");
  47.                 exit(1);
  48.         }
  49.         if((client_fd=accept(sockfd,(struct sockaddr *)&remote_addr,&sin_size))==-1)
  50.         {
  51.                 printf("accept error!");
  52.                 exit(1);
  53.         }
复制代码
代码运行出来,显示listen error!是不是由于raw socket不能够进行bind,listen啊?还是什么原因阿?求知道一下。主要是想做一个对tcp协议进行改进的私有协议,大家有没有好的方法阿,用原始套接字可以实现吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP