OSError [Errno 99] - python

时间:2014-05-24 08:59:06

标签: python socketserver

我想执行以下简单的服务器代码:

import socket

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 22331                # Reserve a port
s.bind((host, port))        # Bind to the port

s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print('Got connection from', addr)
   c.send('Thank you for connecting')
   c.close() 

执行时出现以下错误:

OSError: [Errno 99] Cannot assign requested address

为什么操作系统无法使用地址绑定指定的端口?

2 个答案:

答案 0 :(得分:1)

如果它使用ip地址但不使用主机名。

你的/etc/hosts映射ip到主机名。

应该有这样的东西
127.0.0.1   localhost
127.0.1.1   your_hostname_here

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

您的/etc/hostname显然应与上述相同。

重新启动,您应该能够成功ping主机名。

您也可以使用socket.gethostbyname(socket.gethostname())获取i.p而不是主机名

答案 1 :(得分:1)

尝试将SO_REUSEADDR选项设置为套接字:

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)