私はethernet enabled relayで作業しています。ソケットを介してPythonと通信しようとしています。私は非常に興味深い動作を見ていると私はそれがデバイスに関連しているとは思わない。以下は失敗するコードです。pythonソケット、無効な引数
while True:
try:
skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
skt.connect((self.ip_addr, int(self.port)))
break
問題が消える:私はすなわち、以下のように、while
ループ内skt
の私のdefitionを移動した場合、私は取得していますエラーが[Errno 22] Invalid argument
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>
です。
私はこのコードを書く別の方法があることを知っていますが、それは私が求めているものではありません。
私の質問は、ループの外側にソケットを作成したときにコードが失敗する理由と、ループ内でソケットが作成されたときになぜ機能するのかです。私はこのコードがWindows
に作業を行うことに言及しなかったが、それは私が使用しているものですMac
マシン上で動作しないことに気づい
EDIT
。
私にとってはうまくいきます(python 2.7、windows)、トレースバックを含めることはできますか? –
@ t.m.adam Windowsで動作すると言わざるを得ないが、Mac上でコードを実行している。 – flashburn
それは明らかにOSのことです。あなたはLinuxを試しましたか? –