0
我正在使用ethernet enabled relay。嘗試通過套接字與python進行通信。我看到了非常有趣的行爲,我不認爲它與設備有關。以下是失敗的代碼。我得到的錯誤是[Errno 22] Invalid argument
python socket,無效的參數
self.ip_addr = <some address>
self.port = <some port>
self.max_attempt_cnt = <some count>
self.sleep_interval = <some interval>
try_cnt=0
skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while True:
try:
skt.connect((self.ip_addr, int(self.port)))
break
except socket.error as e:
try_cnt+=1
if (self.max_attempt_cnt > 0) and (try_cnt > self.max_attempt_cnt):
msg = 'Maximum connection attempt count of {} is exceeded'.format(
self.max_attempt_cnt
)
raise ConnectionAttemptCountExceededError(msg)
time.sleep(self.sleep_interval)
<do stuff 0>
<do stuff 1>
<do stuff 2>
如果我提出我的skt
defition的while
循環中,即類似如下:
while True:
try:
skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
skt.connect((self.ip_addr, int(self.port)))
break
問題消失。
我知道有不同的方式來編寫這段代碼,但這不是我要求的。
我的問題是爲什麼當套接字在循環外部創建時出現代碼失敗,以及套接字是在循環內部創建時爲什麼會起作用?
編輯
我意識到,我沒有提到這個代碼在Windows
的工作,但它並沒有一個Mac
機,這是我使用的是什麼上工作。
它適用於我(Python 2.7,窗口),你可以包括追溯? –
@ t.m.adam我應該提到它可以在Windows中工作,但我在Mac上運行我的代碼。 – flashburn
所以這顯然是一個操作系統。你有沒有試過Linux? –