当前位置:  技术问答>linux和unix

怎样选择网卡进行socket编程?急,多谢了!!

    来源: 互联网  发布时间:2015-05-25

    本文导语:  我的应用概述如下:    系统有两块网卡,一块与内网相连,一块与外网相连。现在内网卡要做内网的http代理。我可以获得系统所有网卡的信息,包括硬件地址和ip地址等,存在一个元素为ifreq结构的数组buf中。intrfa...

我的应用概述如下:
   系统有两块网卡,一块与内网相连,一块与外网相连。现在内网卡要做内网的http代理。我可以获得系统所有网卡的信息,包括硬件地址和ip地址等,存在一个元素为ifreq结构的数组buf中。intrface为网卡的个数。现在想选择内网卡做http代理,代码如下:
   struct sockaddr_sll sll;
   fd1 = socket( PF_PACKET, SOCK_RAW, htons(ETH_P_IP) );
   if(ioctl(fd, SIOCGIFINDEX, (char *)&buf[intrface])){
                 printf("ioct error!");
                 exit(1);
                 }
   memset( &sll, 0, sizeof(sll) );
   sll.sll_family = AF_PACKET; 
   sll.sll_ifindex = buf[intrface].ifr_ifindex;
   sll.sll_protocol = htons(ETH_P_IP);

   if( bind(fd1, (struct sockaddr *) &sll, sizeof(sll)) == -1 ) {
                    printf("bind error:%sn",strerror(errno));   
                    return -1;
      }
   运行之后绑定是成功的。
   然后我完善程序,在绑定之后对fd1进行监听,接受来自于fd1的数据包,代码如下:
   listen(fd1,5);
   printf("server is waiting!n");
   clientlen = sizeof(clientsock);
   clientfd=accept(fd1,(struct sockaddr *)&clientsock,&clientlen))
   程序执行到这里就报错:
     accept error:operation not supported;
   这是为什么呢,是我socket建立的不对吗?哪位大侠能告诉我该怎样改才能达到我的目的?多谢了!!

|
要想选择某个网卡,在bind的时候指定其对应的ip就行了。
我看你程序中好像没有这一步。

|
我的建议,既然你可以区分,你就写个配置文件好了,其它的我也不太清楚。至于你的程序出错,最好看看错误码

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教linux下的编程的选择:我听说有gtk+gnome的编程,也有kde里的 什么编程,到底应该选择哪个呢?好象一个是技术好一点,一个是市场占有
  • 初学linux编程该选择哪本书?
  • 请教UNIX下编程语言的选择问题
  • 我想买这本《GNU/Linux 编程指南(第二版)》 大家给点意见,还有根好的选择吗?
  • 唉!不知如何去选择:是学习WINDOWS编程还是LINUX,请大家发表一些看法
  • 如何选择java的编程环境?
  • 嵌入式linux下的界面编程环境选择。求助大虾~.
  • linux 选择什么编程
  • 请教Linux编程环境的选择。
  • 买了一份68¥的Red Hat Linux9操作系统,组件选择的是everything安装,安装的server,只有这个操作系统可以进行编程吗?可以从事哪些方面
  • 异步/多线程/任务/并行编程之一:如何选择合适的多线程模型?
  • c#通过委托delegate与Dictionary实现action选择器代码举例
  • 请教:solaris下如何打印文件,需要支持选择纸张类型和选择黑白彩色!
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 怎样使文件选择器可以选择多个文件?
  • CSS 2和CSS 3选择器详解
  • 在选择gone为默认图形界面后如何选择kde?
  • 我在安装 redhat7.2 的时候选择了 GNOME 界面,启动的时候选择了图形界面启动,请问如何更改?
  • 各位能不能说选择Linux不选择Windows的理由?
  • 编译了lilo之后,重启到选择哪个系统的时候,不是原来的选择画面,我想改回去,如何改
  • Jqgrid设置全选(选择)及获取选择行的值示例代码
  • vim块选择,可以用长方形的方式选择数据:ctrl+v怎么没有效果呢。我是linux环境的。
  • **** 高分, 请问在Java中如何做一个文件选择对话框和目录选择对话框? ***
  • CPU如何知道CS寄存器内装的是LDTR指向的描述符表的段选择符还是GDTR指向的描述符表的段选择符呢?
  • 请问如何保存住下拉框的选项的结果值,比如时间的选择或者任意选项的选择
  • jquery选择器之内容过滤选择器详解
  • 痛哭!!!装了共创桌面后,因为分割了一个分区,导致无法进入系统选择菜单,把共创格式化后,重装原来的windows都无法进入系统选择菜单
  • 请教我先前装了Windows Server 2003,再装Ret Hat Linux 9,开机时,会提示选择操作系统,现在我重装Window Serever 2003,开机不会提示选择
  • 想知道该如何设置才能使 netterm 进行自动登录 ?我查了资料,但无果。 有人给我答案:{不要输入用户名和密码的那种功能?选择地址簿-〉选择登录巨集文件(我用的是中文版,不知道是谁翻得这么烂)。选一个类似的文件改改就是了。}我还是不明白如何操作 ?
  • jquery选择器之属性过滤选择器
  • 有一个疑问,在jsp的页中有一个选择文件的<input type="file" name="upload_file_name">,当我选择了本地的一个文件的时候,按下提交,提


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3