62

I'm new to python and going through a book, Core Python Applications 3rd Edition. This is the the first example and already I'm stumped with it. Here's the code with the error at the end.

#!/usr/bin/env python

from socket import *
from time import ctime

HOST = ' '
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)

    while True:
        print 'waiting for connection...'
        tcpCliSock, addr = tcpSerSock.accept()
        print "...connected from:", addr

        while True:
        data = tcpCliSock.recv(BUFSIZ)
        if not data:
            break
        tcpCliSock.send("[%s] %s" % (ctime(), data))

    tcpCliSock.close()
tcpSerSock.close()

Traceback (most recent call last):
  File "tsTserv.py", line 12, in <module>
    tcpSerSock.bind(ADDR)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 224, in meth
socket.gaierror: [Errno 8] nodename nor servname provided, or not known

What does this mean?

Tom Hale
  • 40,825
  • 36
  • 187
  • 242
user2139635
  • 631
  • 1
  • 5
  • 5

2 Answers2

59

It means that your given host name ' ' is invalid (gai stands for getaddrinfo()).

As NPE already states, maybe an empty string '' would be more appropriate than a space ' '.

glglgl
  • 89,107
  • 13
  • 149
  • 217
  • 10
    This answer is more useful, for everybody except the OP - that is people, who haven't written `HOST = ' '` in their small TCP echo server. Me for example - I just wanted to know what kind of exception this was. So thanks for explaining what `gai` stands for. – Tomasz Gandor Sep 11 '14 at 06:56
19

The

HOST = ' '

should read

HOST = ''

(i.e. no space between the quotes).

The reason you're getting the error is that ' ' is not a valid hostname. In this context, '' has a special meaning (it basically means "all local addresses").

NPE
  • 486,780
  • 108
  • 951
  • 1,012