Skip Menu |
 

This queue is for tickets about the DBD-mysql CPAN distribution.

Report information
The Basics
Id: 83346
Status: rejected
Priority: 0/
Queue: DBD-mysql

People
Owner: Nobody in particular
Requestors: sveta.smirnova [...] oracle.com
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)



Subject: Connections initiated too fast might result in "Cannot assign requested address"
Download (untitled) / with headers
text/plain 2.5k
Originally reported by Csongor Fagyal at http://bugs.mysql.com/bug.php?id=26112 Description: I get periodical errors saying: Can't connect to MySQL server on '192.168.0.200' (99) Happens if I try to connect to the server very frequently (in a loop). Tracing the program gives: restart_syscall(<... resuming interrupted call ...>) = 0 time(NULL) = 1170758829 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3 fcntl64(3, F_SETFL, O_RDONLY) = 0 fcntl64(3, F_GETFL) = 0x2 (flags O_RDWR) connect(3, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("192.168.0.200")}, 16) = -1 EADDRNOTAVAIL (Cannot assign requested address) shutdown(3, 2 /* send and receive */) = -1 ENOTCONN (Transport endpoint is not connected) close(3) = 0 write(1, "Doesn\'t work. Reconnecting in 1 "..., 51) = 51 time(NULL) = 1170758829 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 rt_sigaction(SIGCHLD, NULL, {SIG_DFL}, 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 nanosleep({1, 0}, {1, 0}) = 0 time(NULL) = 1170758830 socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3 fcntl64(3, F_SETFL, O_RDONLY) = 0 fcntl64(3, F_GETFL) = 0x2 (flags O_RDWR) connect(3, {sa_family=AF_INET, sin_port=htons(3306), sin_addr=inet_addr("192.168.0.200")}, 16) = -1 EADDRNOTAVAIL (Cannot assign requested address) shutdown(3, 2 /* send and receive */) = -1 ENOTCONN (Transport endpoint is not connected) How to repeat: use DBI; use strict; my $dsn = "DBI:mysql:database=test:host=192.168.0.200"; my $dbh; my $user = 'test'; my $password = 'test'; for (1..50000) { $dbh = DBI->connect($dsn, $user, $password, {'RaiseError' => 1} ); my $sth = $dbh->prepare('SELECT * FROM users'); $sth= undef; $dbh->disconnect; $dbh= undef; } Suggested fix: I am thinking whether I run out of ports because of the high number of connects... I see a lot of "TIME_WAIT" TCP connections when I do netstat -n (somewhere around 15000). Also, if at a failure I wait a few seconds, I am able to connect again. I have found this (a similar situation?): http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4294599 Or could it be related to bug # 20629 ? [6 Feb 2007 11:32] Csongor Fagyal Actually I am pretty sure now that I just simply run out of available TCP ports, so I have changed severity to "feature request". However, I would like to see DBD::mysql to handle this situation in a more transparent way (some sort of a "retry connect" feature).
Download (untitled) / with headers
text/plain 127b
Running out of TCP ports is a system setup issue and nothing us poor DBD driver maintainers can really do anything about AFAIK.


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.