* Andre Tann wrote on Thu, Dec 27, 2007 at 12:38 +0100:
ich möchte gerne in einem Skript einen zufälligen Port auswählen, sagen wir zwischen 20000 und 40000, gucken ob er frei ist, und ihn dann im weiteren Skriptverlauf verwenden.
Unter Unix könnte es klappen, an port 0 zu binden und das System einen freien suchen zu lassen (kann sein, dass das ne Javaspezialfunktion ist), hab sowas aber nie benutzt. Die Gegenseite muss den Port ja kennen, also muss man i.d.R. was festes nehmen. use IO::Socket; my $sock = new IO::Socket::INET( LocalHost => 'thekla', LocalPort => 0, Proto => 'tcp', Listen => 1, Reuse => 1, ); in http://www.perlfect.com/articles/sockets.shtml ist LocalPort numerisch gequotet, halte das für einen Fehler, bin mir aber nicht sicher. Wenn das nicht funktioniert, statt LocalPort => 0 LocalPort => $port verwenden und eine Schleife drummachen (solange der entsprechende Fehler [address already in use, glaub ich] kommt). Würde ich linear iterieren (for), kein random (machts bloss kompiziert und unbestimmt). Bei (meinem) ssh -L geht 0 jedenfalls /nicht/, kommt ein Syntaxfehler.
Hat jemand einen Tip, wie man rauskriegt, ob ein Port frei ist? Mit netstat sehe ich die benutzten Ports ("Zustand" ist "VERBUNDEN"), aber man müßte doch auch irgendwie testen können, ob ein Port unbenutzt ist? Ich werd da aus der manpage nicht schlau.
Nein, das hilft Dir nichts. Wenn Du so einen freien Port ermittelt hast, kann das bind für's listen trozdem schiefgehen, weil der Port inzwischen verwendet wird. Das kann dann zu komischen Fehlern führen, die beim Test nicht auftreten etc. Einfach probieren, wenn es nicht klappt, dann halt nochmal. Das Betriebssystem kümmert sich um die Details. Aber in einer anderen Mail hast Du ja geschrieben, dass Du nur ein ssh -L machst und `lsof -nbi TCP:8011' reicht (das kann zwar zu Fehlerkennungen führen, aber macht ja hier nichts). oki, Steffen -- Dieses Schreiben wurde maschinell erstellt, es trägt daher weder Unterschrift noch Siegel. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org