Unbinding sockets in threads..

  • Thread starter Richard Spooner
  • Start date
R

Richard Spooner

Chaps,

I've written a piece of python code below that when called with a line such
as x = getdata(9999), listens on that port for data I'm sending it and puts
the data in a list. If I delete x using del x and then try and assign a new
value to port 9999 (e.g z=getdata(9999) ) then it reports that the socket it
already bound, and I can't find any way of unbinding the port.

If I try it not in a thread the del function works fine (i.e. creating and
binding a socket s and then deleting it) Can anyone suggest some
modifications I can do to make this work??

Thanks in advance

Dave

import threading
import socket
import struct
import sys
import time





class getdata(threading.Thread):
def __init__(self, port):
threading.Thread.__init__(self)
self.x = ['ZERO SPACE']
self.s = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
try:
self.s.bind(( '', port))

except socket.error, msg:
print "Could not bind to socket"
time.sleep(3)
self.s.close()
sys.exit(1)
self.carryon = 'true'
self.start()






def run(self):
while self.carryon == 'true':
self.data, self.addr = self.s.recvfrom( 1024 )
self.channel, self.value = struct.unpack( 'IBxxx' , self.data )
try:
self.x[int(self.channel)] = self.value
except IndexError:
while len(self.x)-1 < int(self.channel):
if len(self.x) == int(self.channel):
self.x.append(self.value)
else:
self.x.append('NA')
except:
print "Dictionary creation error"
time.sleep(3)
self.s.close()
sys.exit

print self.x
return
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top