Witam.
Jak w pythonie zrobić gniazdo nieblokujące ?
mam taki komunikat:
Traceback (most recent call last):
File "limit.py", line 36, in <module>
conn.sendall("action=dunno\n\n")
File "/usr/lib/python2.7/socket.py", line 228, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 32] Broken pipe
import socket
HOST = 'localhost'
PORT = 2121
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
while 1:
sender = ''
sasl_username = ''
data = conn.recv(10240)
data = data.split('\n') #--- tablica \n request=smtpd_access_policy
length = len(data) #rozmiar tabeli data
for x in range(length):
print data[x]
query = data[x].split('=')
if query[0] == 'sender' and query[1] != '':
sender = query[1]
if query[0] == 'sasl_username' and query[1] != '':
sasl_username = query[1]
# conn.sendall("action=defer_if_permit Sendmail limit\n\n")
#----------------------------------------------------------------
if sasl_username == '': #---gdy sender nie jest lokalny poczta z zewnatrz do mhelmet
print sender
conn.sendall("action=dunno\n\n")
# conn.close()
else:
print sender
print sasl_username
conn.sendall("action=defer_if_permit Sendmail limit\n\n")
# conn.close()
# break
#close
# if not data: break
#conn.close()
podejrzewam, że problem jest związany z gniazdem, które się blokuje.
zgodnie z dokumentacją postfixa skrypt nie może zamykać połączenia ponieważ zostanie ono wykorzystane ponownie: http://www.postfix.org/SMTPD_POLICY_README.html
Skrypt działa ale tylko za pierwszym razem. kolejne zapytania wywalają błąd.