免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: grayblaze
打印 上一主题 下一主题

同一个ip上的两个不同的socket能否绑定到相同的端口上? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-07-03 15:55 |只看该作者
你调用listen后再fork成几个进程accept。
不同进程就同时监听一个端口了。
来了链接,内核会 ...


同意这个方法。

论坛徽章:
0
12 [报告]
发表于 2009-07-03 16:08 |只看该作者
应该可以的,但同时只能有一个进程收到数据

论坛徽章:
0
13 [报告]
发表于 2009-07-03 16:32 |只看该作者
原帖由 brookqiao 于 2009-7-3 16:08 发表
应该可以的,但同时只能有一个进程收到数据


TCP一个连接《协议,源地址,源端口,目的地址,目的端口》是这个五元组标识的。
本来就是一个进程受到数据吗。这个进程代表了一个连接。
数据同时到不同进程还不乱掉了。

如果你想经数据给其它进程,可以用dup pipe等实现。

论坛徽章:
0
14 [报告]
发表于 2009-07-03 16:43 |只看该作者

回复 #1 grayblaze 的帖子

只有4种情况可以端口复用,这种在网上搜可以搜到很多,我来随便贴一个搜到的链接。:wink:
http://hi.baidu.com/zhoutianyang ... 00d8eb2f73b3c4.html

论坛徽章:
0
15 [报告]
发表于 2009-07-03 17:12 |只看该作者

回复 #14 urapple 的帖子

这个帖子,我之前看过,还是没解决我的问题
注意条件:
1.两个socket在同一个ip同一个端口上
2.对于普通的单播报文,也要能转发到两个socket上
3.可以是tcp或者udp

你所转帖子中的任何一条都不符合

论坛徽章:
0
16 [报告]
发表于 2009-07-03 17:21 |只看该作者

回复 #13 思一克 的帖子

由于某种原因,我们不能做进程间通信(mtu或者同步异步的问题),若能在相同端口监听,不就不需要IPC了吗?做这个的目的就是不想要IPC通信。

原理上,内核只要查一下有哪些socket监听,然后把这些报文分发到这些socket不就行了吗?


数据到不同的进程,数据的维护由这两个进程完成,很简单,比如数据包里面设置个flag=1,表示进程1来和对方通信,flag=2,表示进程2来和对方通信,进程1收到flag=2,进程2收到flag=1的报文就直接丢弃

[ 本帖最后由 grayblaze 于 2009-7-3 17:23 编辑 ]

论坛徽章:
0
17 [报告]
发表于 2009-07-03 17:26 |只看该作者
不可以.如果你想对进程处理可在监听后accept后fork进程进行处理.

论坛徽章:
0
18 [报告]
发表于 2009-07-03 17:50 |只看该作者

回复 #15 grayblaze 的帖子

我的意思就是不可以。:wink:
不过我的经验是,windows下可以(只是可以bind,因为都可以运行起来,至于收到的数据会不会出问题,这我也没试过,按tcp协议应该不行才行),linux下不行。

[ 本帖最后由 urapple 于 2009-7-3 18:34 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2009-07-03 18:03 |只看该作者
进程1   bind(IPORT)
进程2   bind(IPORT)


udp可以,但只有一个程序可以收到数据吧

tcp不可以,对于windows上可以这个说法也持怀疑态度

论坛徽章:
0
20 [报告]
发表于 2009-07-03 18:25 |只看该作者

回复 #9 思一克 的帖子

我需要能收到对方发到这个端口的所有包(两个进程都可以收到)

不过,你的方法是个不错的方法:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP