Thread DBD::mysql: Filedescriptor der Verbindung
(2 answers)
Opened by torsten at 2011-01-27 14:52
nein, mysql_socket ist der UNIX-Domain Socket, der beim Verbindungsaufbau benutzt werden soll.
Ich meine etwas komplett anderes. Ich baue eine Verbindung zur Datenbank auf, egal ob über INET oder über UNIX. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 perl -MDBI -le ' system "ls -l /proc/$$/fd"; my $h=DBI->connect("dbi:Pg:dbname=postgres", "postgres"); die unless $h; system "ls -l /proc/$$/fd"; print "postgres file descriptor=$h->{pg_socket}" ' total 0 lrwx------ 1 postgres postgres 64 2011-01-27 17:45 0 -> /dev/pts/16 lrwx------ 1 postgres postgres 64 2011-01-27 17:45 1 -> /dev/pts/16 lrwx------ 1 postgres postgres 64 2011-01-27 17:45 2 -> /dev/pts/16 lr-x------ 1 postgres postgres 64 2011-01-27 17:45 3 -> pipe:[760699] total 0 lrwx------ 1 postgres postgres 64 2011-01-27 17:45 0 -> /dev/pts/16 lrwx------ 1 postgres postgres 64 2011-01-27 17:45 1 -> /dev/pts/16 lrwx------ 1 postgres postgres 64 2011-01-27 17:45 2 -> /dev/pts/16 lr-x------ 1 postgres postgres 64 2011-01-27 17:45 3 -> socket:[760717] lr-x------ 1 postgres postgres 64 2011-01-27 17:45 4 -> pipe:[760721] postgres file descriptor=3 Du siehst, durch den Connect zur Datenbank ist ein neuer File Descriptor, in diesem Fall 3, geöffnet wurden. Das sagt der Output von ls -l /proc/$$/fd. $h->{pg_socket} enthält nun genau diese Zahl. Diese Information kann man z.B. nutzen, um Schließe alle Handles außer ... umzusetzen. In Postgres geht damit aber auch noch mehr, z.B. kann eine Abfrage asynchron gestartet werden. Natürlich muss man dann immer mal wieder nachfragen, ob die Anfrage fertig ist. Hat man alle anderen Arbeiten erledigt, will man nur noch warten, bis die DB endlich was liefert. Das macht man am besten mit select oder etwas Ähnlichem. Nun braucht man den File Descriptor. |