Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 971
lowerkey Avatar asked Dec 10 '22 15:12

lowerkey


2 Answers

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

like image 157
Ikke Avatar answered Dec 28 '22 16:12

Ikke


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.

like image 20
msw Avatar answered Dec 28 '22 14:12

msw