客户掉线了,连接坏掉了,我连ip地址都读不出来?

m
minquan
楼主 (未名空间)
python socket编程真是心塞啊

TCP连接是这样管理的:
服务器建立一个监听端口
然后被客户端连一个,建立一个socket,这些socket就是伺候各客户端的专线

我现在用select模块来轮询各个socket,如果发现哪个给断了
我需要知道所连的对方IP,因为这个IP是用来辨认客户的身份证
但是socket.getpeername()告诉我因为连接已经嗝屁了,所以无法得到对方的地址
WinError10038

拜托,我如果和一帮客户拨电话——哪个给挂电话了,我连对方的电话号码都不能知道了?

这个socket自己都放弃记录地址信息了,参数出现个fd=-1,告诉它坏掉了,所以所有
的地址信息自己给删掉了。

人死了还要给登记个姓名,但是我的连接一旦挂了,原来是谁连接的谁,就查不出来了?
而且这种问题还是有时发生,有时不发生,真是奇了怪了。
h
heteroclinic
2 楼
我记得c 的select 里你可以加上socket中断的事件,屁松不没这么用过。
c
cxu123
3 楼
这是你的问题,应该一连上就记住对方地址。

电话来电显示号码也是这么工作的,哪有挂掉电话,才开始要求显示对方号码的
m
minquan
4 楼
谢谢思路,的确侥幸解决了。
不过记住电话号码,不应该是python这种号称是高级语言的应该做的么?这么简单低级的功能还必须由我手写?又不是C

【 在 cxu123 (NY) 的大作中提到: 】
这是你的问题,应该一连上就记住对方地址。
电话来电显示号码也是这么工作的,哪有挂掉电话,才开始要求显示对方号码的
c
cxu123
5 楼
你查查它有这个功能没有?它没有设计你也没办法。

短线以后还能得到对方地址要碰运气,因为socket已经在资源回收阶段,等待TCP TIME_WAIT结束,已经结束你啥也得不到。

【 在 minquan (三民主义) 的大作中提到: 】
谢谢思路,的确侥幸解决了。
不过记住电话号码,不应该是python这种号称是高级语言的应该做的么?这么简单低级
的功能还必须由我手写?又不是C