lowerkey
lowerkey

Reputation: 8335

What host do I have to bind a listening socket to?

I used python's socket module and tried to open a listening socket using

import socket
import sys

def getServerSocket(host, port):
    for r in socket.getaddrinfo(host, port, socket.AF_UNSPEC,
                                socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
        af, socktype, proto, canonname, sa = r
        try:
            s = socket.socket(af, socktype, proto)
        except socket.error, msg:
            s = None
            continue
        try:
            s.bind(sa)
            s.listen(1)
        except socket.error, msg:
            s.close()
            s = None
            continue
        break
    if s is None:
        print 'could not open socket'
        sys.exit(1)
    return s

Where host was None and port was 15000.

The program would then accept connections, but only from connections on the same machine. What do I have to do to accept connections from the internet?

Upvotes: 4

Views: 5765

Answers (3)

msw
msw

Reputation: 43527

The first problem is that your except blocks are swallowing errors with no reports being made. The second problem is that you are trying to bind to a specific interface, rather than INADDR_ANY. You are probably binding to "localhost" which will only accept connections from the local machine.

INADDR_ANY is also known as the constant 0x00000000, but the macro is more meaningful.

Assuming you are using IPv4 (that is, "regular internet" these days), copy the socket/bind code from the first example on the socket module page.

Upvotes: 5

Brenton Alker
Brenton Alker

Reputation: 9082

You'll need to bind to your public IP address, or "all" addresses (usually denoted by "0.0.0.0").

If you're trying to access it across a network you also might need to take into account firewalls etc.

Upvotes: 2

Ikke
Ikke

Reputation: 101251

Try 0.0.0.0. That's what's mostly used.

Upvotes: 8

Related Questions