DisablePort() calls shutdown and close(). shutdown()
returns an error of ENOTCONN (which I expect).
The problem I have is my code keeps trying to open the
connection once a minute. Every time I try to open the
connection the file descriptors keep getting used up until
eventually I run out.
Is there something else I need to do to cleanup the failed
connection? Or is this a kernel problem?
The DIAGNOSTIC_LOG() functions just open up a file and write
the text passed into a file. Yes I fclose() the file handle
for that when I am done.
Thanks for the information.
Please CC me directly.
Jerry Geis
geisj@pagestation.com
----------- code ---------
unsigned int port = hw_ptr->term_port + hw_ptr->comm_port;
struct in_addr *ptr;
struct sockaddr_in tserver_addr;
struct hostent *server_info; /* server information */
char address[20];
MaskWakeUpSignal(); /* need to avoid EINTR */
/* lookup server in and get the address */
server_info = gethostbyname(hw_ptr->term_ip);
if(server_info == NULL)
{
DIAGNOSTIC_LOG_2("No server information for terminal server %s IP: %s", hw_ptr->node_name, hw_ptr->term_ip);
return(-1);
}
ptr = (struct in_addr *) *server_info->h_addr_list;
strcpy(address, (char *) inet_ntoa((struct in_addr) *ptr));
DIAGNOSTIC_LOG_4("Opening terminal server %s name:%s address:%s port:x%04x", hw_ptr->node_name, server_info->h_name, address, port);
memset(&tserver_addr, 0, sizeof(tserver_addr));
tserver_addr.sin_family = AF_INET;
tserver_addr.sin_addr.s_addr = inet_addr(address);
tserver_addr.sin_port = htons(port);
DIAGNOSTIC_MESSAGE_3("Waiting on socket %s %s using port x%04x", hw_ptr->node_name, hw_ptr->term_ip, port);
if((hw_ptr->fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
DIAGNOSTIC_LOG_3("Socket error %d for %s %s", errno, hw_ptr->node_name, hw_ptr->term_ip);
return(-1);
}
DIAGNOSTIC_MESSAGE_2("Waiting on connect %s %s", hw_ptr->node_name, hw_ptr->term_ip);
if(connect(hw_ptr->fd, (struct sockaddr *) &tserver_addr, sizeof(tserver_addr)) < 0)
{
DisablePort(hw_ptr, FALSE);
DIAGNOSTIC_LOG_4("Connect error %d for %s node %s port x%04x.", errno, hw_ptr->term_ip, hw_ptr->node_name, hw_ptr->term_port + hw_ptr->comm_port);
return(-1);
}
return(hw_ptr->fd);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/