Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Michal Štrba 31. 03. 2012, 15:11:16

Název: Socket v Pythone, problém s connectom
Přispěvatel: Michal Štrba 31. 03. 2012, 15:11:16
Nazdar!

Zacal som riesit kniznicu socket a mam maly problem.
Kód: [Vybrat]
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
while True:
  try:
    s.connect(("servername", 50007))
    break
  except socket.timeout:
    print "timeout"

Pri tomto kode dostanem takyto vystup:

timeout
Traceback (most recent call last):
  File "test.py", line 8, in <module>
    s.connect(("192.168.0.120", 50007))
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 114] Operation already in progress


Teda timeout bol, ale ked sa pripajal druhy krat nastala tato chyba. Chcem aby sa pripajal dovtedy kym sa mu to nepodari (kym sa server nevytvori). Neviete ako to riesit?
Název: Re:Socket v pythone, problem s connectom
Přispěvatel: Michal Štrba 31. 03. 2012, 15:12:53
Hehe, tak s tym zakrytim lokalnej ip mi to moc nevyslo :)
Název: Re:Socket v pythone, problem s connectom
Přispěvatel: tadeas 31. 03. 2012, 17:25:58
Mně to hází
Kód: [Vybrat]
error: [Errno 111] Connection refused.
Jinak víš jistě, že vyhození socket.timeout znamená, že se socket uzavřel? Možná ho budeš muset uzavřít ručně (a/nebo počkat, až ho systém skutečně uvolní, na to jsem taky už narazil..)

Jinak možná odchytáváš špatnou výjimku. K timeoutu dojde, pokud se vůbec nedostaneš na ten server přes síť. Pokud je server up, ale na danym portu nic neposlouchá, tak to nebude vyhazovat timeout.
Název: Re:Socket v pythone, problem s connectom
Přispěvatel: Michal Štrba 31. 03. 2012, 17:32:56
tadeas: Jo, ja si ten "servername" v skutocnosti davam vlastnu ip, takze on sa s tym "spoji" ale k ziadnemu serveru sa logicky nedostane. Preto vyhadzuje timeout. A je to naozaj preto, ze socket sa neuzavrie uz to mam dik :)