}
#endif
+ /* We want to do the connect() in a non-blocking mode, since
+ * Windows has an internal retry logic that may lead to long
+ * timeouts if the peer is not listening. */
+ if(0 != curlx_nonblock(serverfd, TRUE)) {
+ error = SOCKERRNO;
+ logmsg("curlx_nonblock(TRUE) failed with error: (%d) %s",
+ error, sstrerror(error));
+ sclose(serverfd);
+ return CURL_SOCKET_BAD;
+ }
+
switch(socket_domain) {
case AF_INET:
memset(&serveraddr.sa4, 0, sizeof(serveraddr.sa4));
if(rc) {
error = SOCKERRNO;
+ if((error == EINPROGRESS) || (error == EWOULDBLOCK)) {
+ fd_set output;
+ struct timeval timeout = {1, 0}; /* 1000 ms */
+
+ FD_ZERO(&output);
+ FD_SET(serverfd, &output);
+ while(1) {
+ rc = select((int)serverfd + 1, NULL, &output, NULL, &timeout);
+ if(rc < 0 && SOCKERRNO != EINTR)
+ goto error;
+ else if(rc > 0) {
+ curl_socklen_t errSize = sizeof(error);
+ if(0 != getsockopt(serverfd, SOL_SOCKET, SO_ERROR,
+ (void *)&error, &errSize))
+ error = SOCKERRNO;
+ if((0 == error) || (EISCONN == error))
+ goto success;
+ else if((error != EINPROGRESS) && (error != EWOULDBLOCK))
+ goto error;
+ }
+ else if(!rc) {
+ logmsg("Timeout connecting to server port %hu", port);
+ sclose(serverfd);
+ return CURL_SOCKET_BAD;
+ }
+ }
+ }
+error:
logmsg("Error connecting to server port %hu: (%d) %s",
port, error, sstrerror(error));
sclose(serverfd);
return CURL_SOCKET_BAD;
}
-
+success:
logmsg("connected fine to %s%s%s:%hu, now tunnel",
op_br, ipaddr, cl_br, port);
+ if(0 != curlx_nonblock(serverfd, FALSE)) {
+ error = SOCKERRNO;
+ logmsg("curlx_nonblock(FALSE) failed with error: (%d) %s",
+ error, sstrerror(error));
+ sclose(serverfd);
+ return CURL_SOCKET_BAD;
+ }
+
return serverfd;
}
#
sub stopserver {
my ($server, $pidlist) = @_;
+ my $ipvnum = 4;
#
# kill sockfilter processes for pingpong relative server
if($server =~ /^(ftp|imap|pop3|smtp)s?(\d*)(-ipv6|)$/) {
my $proto = $1;
my $idnum = ($2 && ($2 > 1)) ? $2 : 1;
- my $ipvnum = ($3 && ($3 =~ /6$/)) ? 6 : 4;
+ $ipvnum = ($3 && ($3 =~ /6$/)) ? 6 : 4;
killsockfilters("$LOGDIR/$PIDDIR", $proto, $ipvnum, $idnum, $verbose);
}
#
my $pidfile = $serverpidfile{$server};
unlink($pidfile) if(-f $pidfile);
}
+ #
+ # cleanup server lock files
+ #
+ foreach my $server (@killservers) {
+ # servers seem to produce (some of) these lock files
+ my @lockfiles = (
+ "$LOGDIR/$LOCKDIR/$server.lock",
+ "$LOGDIR/$LOCKDIR/$server-IPv$ipvnum.lock",
+ "$LOGDIR/$LOCKDIR/sws-".uc($server)."-IPv$ipvnum.lock"
+ );
+ foreach my $lockfile (@lockfiles) {
+ if(-f $lockfile) {
+ unlink($lockfile);
+ logmsg "RUN: kill $server, cleaned up $lockfile\n" if ($verbose);
+ }
+ }
+ }
return $result;
}
($what eq "ftp") ||
($what eq "imap") ||
($what eq "smtp")) {
- if($torture && $run{$what} &&
+ if($run{$what} &&
!responsive_pingpong_server($what, "", $verbose)) {
if(stopserver($what)) {
return ("failed stopping unresponsive ".uc($what)." server", 3);
}
}
elsif($what eq "ftp-ipv6") {
- if($torture && $run{'ftp-ipv6'} &&
+ if($run{'ftp-ipv6'} &&
!responsive_pingpong_server("ftp", "", $verbose, "ipv6")) {
if(stopserver('ftp-ipv6')) {
return ("failed stopping unresponsive FTP-IPv6 server", 3);
}
}
elsif($what eq "gopher") {
- if($torture && $run{'gopher'} &&
+ if($run{'gopher'} &&
!responsive_http_server("gopher", $verbose, 0,
protoport("gopher"))) {
if(stopserver('gopher')) {
}
}
elsif($what eq "gopher-ipv6") {
- if($torture && $run{'gopher-ipv6'} &&
+ if($run{'gopher-ipv6'} &&
!responsive_http_server("gopher", $verbose, "ipv6",
protoport("gopher"))) {
if(stopserver('gopher-ipv6')) {
}
}
elsif($what eq "http-proxy") {
- if($torture && $run{'http-proxy'} &&
+ if($run{'http-proxy'} &&
!responsive_http_server("http", $verbose, "proxy",
protoport("httpproxy"))) {
if(stopserver('http-proxy')) {
}
}
elsif($what eq "http-ipv6") {
- if($torture && $run{'http-ipv6'} &&
+ if($run{'http-ipv6'} &&
!responsive_http_server("http", $verbose, "ipv6",
protoport("http6"))) {
if(stopserver('http-ipv6')) {
}
}
elsif($what eq "rtsp") {
- if($torture && $run{'rtsp'} &&
+ if($run{'rtsp'} &&
!responsive_rtsp_server($verbose)) {
if(stopserver('rtsp')) {
return ("failed stopping unresponsive RTSP server", 3);
}
}
elsif($what eq "rtsp-ipv6") {
- if($torture && $run{'rtsp-ipv6'} &&
+ if($run{'rtsp-ipv6'} &&
!responsive_rtsp_server($verbose, "ipv6")) {
if(stopserver('rtsp-ipv6')) {
return ("failed stopping unresponsive RTSP-IPv6 server", 3);
return ("failed stopping $what server with different cert", 3);
}
}
- if($torture && $run{$cproto} &&
+ if($run{$cproto} &&
!responsive_pingpong_server($cproto, "", $verbose)) {
if(stopserver($cproto)) {
return ("failed stopping unresponsive $cproto server", 3);
return ("failed stopping HTTPS server with different cert", 3);
}
}
- if($torture && $run{'http'} &&
+ if($run{'https'} &&
+ !responsive_http_server("https", $verbose, 0,
+ protoport('https'))) {
+ if(stopserver('https')) {
+ return ("failed stopping unresponsive HTTPS server", 3);
+ }
+ }
+ if($run{'http'} &&
!responsive_http_server("http", $verbose, 0,
protoport('http'))) {
if(stopserver('http')) {
return ("failed stopping GOPHERS server with different cert", 3);
}
}
- if($torture && $run{'gopher'} &&
+ if($run{'gopher'} &&
!responsive_http_server("gopher", $verbose, 0,
protoport('gopher'))) {
if(stopserver('gopher')) {
# for now, we can't run http TLS-EXT tests without gnutls-serv
return ("no gnutls-serv (with SRP support)", 4);
}
- if($torture && $run{'httptls'} &&
+ if($run{'httptls'} &&
!responsive_httptls_server($verbose, "IPv4")) {
if(stopserver('httptls')) {
return ("failed stopping unresponsive HTTPTLS server", 3);
# for now, we can't run http TLS-EXT tests without gnutls-serv
return ("no gnutls-serv", 4);
}
- if($torture && $run{'httptls-ipv6'} &&
+ if($run{'httptls-ipv6'} &&
!responsive_httptls_server($verbose, "ipv6")) {
if(stopserver('httptls-ipv6')) {
return ("failed stopping unresponsive HTTPTLS-IPv6 server", 3);
}
}
elsif($what eq "tftp") {
- if($torture && $run{'tftp'} &&
+ if($run{'tftp'} &&
!responsive_tftp_server("", $verbose)) {
if(stopserver('tftp')) {
return ("failed stopping unresponsive TFTP server", 3);
}
}
elsif($what eq "tftp-ipv6") {
- if($torture && $run{'tftp-ipv6'} &&
+ if($run{'tftp-ipv6'} &&
!responsive_tftp_server("", $verbose, "ipv6")) {
if(stopserver('tftp-ipv6')) {
return ("failed stopping unresponsive TFTP-IPv6 server", 3);
}
}
elsif($what eq "http-unix") {
- if($torture && $run{'http-unix'} &&
+ if($run{'http-unix'} &&
!responsive_http_server("http", $verbose, "unix", $HTTPUNIXPATH)) {
if(stopserver('http-unix')) {
return ("failed stopping unresponsive HTTP-unix server", 3);