Reputation: 1566
I have a python script which opens a port and listens to it on Raspberry. I added it to /etc/rc.local
and everything is working properly. But my problem is the socket which is not created when the process is being executed.
s = socket.socket()
s.bind((host_ip,port)) #e.g. host_ip='192.168.1.32' , port=12345
s.listen(5)
while True:
c,addr = s.accept()
c.send('ACK')
c.close()
the above code is not executed because there is no 'eth0' connection available. What should I do? Should I loop scan the socket status until connection is being available? Is there any other more sophisticated solution?
Upvotes: 4
Views: 4493
Reputation: 3281
I don't know anything about Python but generally speaking of socket programming.
When you listen you don't need any host (s.bind(('',port))
).
You have to determine a function or an event handler that raises when a connection is established (maybe handle_connect
in Python).
In the handler function you connect the client on a port other than the port you are currently listening.
Upvotes: 0
Reputation: 1520
Like this:
import urllib2,thread
from time import sleep
import netifaces
class _check:
def __init__(self):
self.uri="http://www.google.com"
self.period = 5
self.status = False
self.ifaces()
def check(self):
try:
answ = urllib2.urlopen(self.uri)
if answ:
self.status = True
#Now can run your awesome code !
print "okay go take a beer"
except Exception,e : print e
def timer(self,pass_arg) :
while True :
if self.status != True :
self.check()
sleep(self.period)
print "running"
elif self.status == True :
print "thread ending"
break
def ifaces(self):
for i in netifaces.interfaces() :
try:
print i,netifaces.ifaddresses(i)[2]
except:
print i, "iface not up !"
check = _check()
thread.start_new_thread(check.timer,(None,))
so this answer equal to my comment answer.
Upvotes: 2
Reputation: 8558
accept()
is method will block the thread,when no device is detected connecting server,it will block, means the code after accept()
will not executed.
Upvotes: 0