首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打开了同一个端口--一个在星号(*)地址上,一个在本地主机上

问打开了同一个端口--一个在星号(*)地址上,一个在本地主机上
EN

Server Fault用户
提问于 2015-02-04 16:02:32
回答 1查看 136关注 0票数 0

在Mac上运行两个跳槽实例,我来到了这个特殊的情况:

代码语言:javascript
复制
~$ lsof -ni :9905
COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    40320 *******  394u  IPv6 0xf5e143eb9100c205      0t0  TCP *:9905 (LISTEN)
java    40325 *******  302u  IPv6 0xf5e143eb79be9005      0t0  TCP 127.0.0.1:9905 (LISTEN)

我尝试在python中重新创建这种情况,但是失败了(我认为应该这样):

代码语言:javascript
复制
>>> s = socket.socket()
>>> s.bind(("",12345))
>>> s.listen(1)
>>> z = socket.socket()
>>> z.bind(("localhost",12345))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 48] Address already in use

我也尝试过用AF_INET6获得同样的结果。

有人知道这是怎么回事吗?这怎么可能发生呢?我的印象是星号被绑定到所有地址..。如果这确实是一种正常行为,那么在python中重新创建它的正确原因是什么呢?

谢谢!

EN

回答 1

Server Fault用户

回答已采纳

发布于 2015-02-04 19:04:33

这就是如何在osx上复制它。不知道它为什么会起作用(不要告诉任何人,我试着装成一个linux的家伙),在linux上它不工作。

有关套接字的详细说明,请参阅https://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t

代码语言:javascript
复制
>>> import socket
>>> s=socket.socket()
>>> s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
>>> s.bind(("",12345))
>>> s.listen(1)
>>> z=socket.socket()
>>> z.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
>>> z.bind(("127.0.0.1",12345))
>>> z.listen(1)

和伊索夫

代码语言:javascript
复制
Python    7501 danb    3u  IPv4 0xac5d4de7add842f      0t0  TCP *:12345 (LISTEN)
Python    7501 danb    4u  IPv4 0xac5d4de7bb7928f      0t0  TCP 127.0.0.1:12345 (LISTEN)
票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/664981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档