Chinaunix

标题: 分配的socket,如何知道是WAN口还是LAN口的 [打印本页]

作者: coolwhy    时间: 2008-10-17 11:37
标题: 分配的socket,如何知道是WAN口还是LAN口的
Hi, guys\r\n今天碰到个问题,现在我板子上有2个网口,一个Lan口,一个Wan口,我写程序的时候发现我分配socket后,并不知道这个socket对应的是Lan口还是Wan口啊。\r\n望指教,谢谢!
作者: a_la_lei    时间: 2008-10-17 11:40
棒定的是哪个IP,那个IP对应的就是tcp/ip协议栈上的MAC地址
作者: ssffzz1    时间: 2008-10-17 11:43
如果你不明确指定,而让系统自己选择的话:\r\n1、如果你的程序作为客户端,哪么是由路由表来决定的,从那个接口出去就绑定这个接口的IP。\r\n2、如果你的程序是服务端,哪么缺省绑定的是所有的IP,也就是说在所有的IP地址上做监听。
作者: coolwhy    时间: 2008-10-17 17:21
多谢楼上的回答。现在的问题是server已经发SYN包出来了,我Listen的IP是缺省的,也就是说任何IP。但是就是连不上,不知道为什么?是不是和router有关系。
作者: ssffzz1    时间: 2008-10-17 17:25
server已经发SYN包出来了\r\n\r\nSYN包应该是客户端发给SERVER的,SERVER不会发SYN包的。或许是你的理解有问题。
作者: coolwhy    时间: 2008-10-17 17:34
O(∩_∩)O 不好意思,我都搞晕了。。。板子是既做server也做client,做server的时候,分配socket,绑定ip,其他client发过来的SYN包已经检测到,但是确无法连接。。板子上有个LAN口和一个WAN口。发送和接受都希望从WAN口走,现在的包发送没有问题,但是接受别人的SYN包还是有问题。不知道怎么回事。\r\nssffzz1 能否在给点提示
作者: ssffzz1    时间: 2008-10-17 17:49
如果路由和访问控制没有问题的话,哪么大多是软件自身的问题了。\r\n\r\n对于SERVERl来说是这样的,客户用那个IP来访问的SERVER,哪么SERVER回包的时候也用这个IP来回包。\r\n\r\n你抓包看看是否符合这个规则,还有各个字段的参数是否正确。
作者: coolwhy    时间: 2008-10-20 12:11
这两天还在看这样的问题,也听取了很多人的意见。\r\nservaddr.sin_addr.s_addr = htonl (INADDR_ANY);这样的写法应该是可以接收到2块网卡中任意一块的连接信息。在listen的时候也可以绑定固定的ip口,也就是固定的网口,我是这样做的,我绑定了固定的ip,但是在client连接的时候,server依然没有反应,但是抓包发现Client确实发了SYN。\r\n难道真的是协议栈的问题?
作者: ssffzz1    时间: 2008-10-20 14:41
你抓包看看SERVER回了没有啊。同时SERVER的服务端也可以开DEBUG。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2