|
Hi all,
I am trying to establish connection with some other
server from AS/400 using sockets. Server socket is
running in the other server. I am using IP address to
connect to the server. I am able to connect
successfully, but sometimes I get the system message
saying 'connection failed'. I am able to ping from
both the servers. Can any one give solution to this
problem from the below code.
Thanks in advance.
Vishnu
int WEBAPIConnect( char *system, int port )
{
ulong addr; /* Address of
server */
ulong addrdec; /* Address of
server */
int sockfd = 0; /* socket
descriptor */
int rc = 0; /* return value of
select() */
int iMax = 0; /* Maximum value
of descriptor */
int otimeout =0;/* Socket open
time value */
int iBlock =0; /* IO block flag
*/
char *temp =" "; /* Temporary
variable */
char *tmpsockfd = " ";/* To store
sockfd */
fd_set ready; /* Descriptor set
*/
struct hostent *fxtent; /* Address
structure */
struct sockaddr_in fxaddr; /* Address
structure */
struct timeval timeout; /* Timeout
structure */
/* Retrieve socket open timeout value from
configuration data area*/
memset( temp, 0, sizeof( temp ));
QXXRTVDA(cfg_dtaname, 36, 8, temp);
otimeout = atoi( temp );
/* Initialize the structure containing the address
*/
memset(&(fxaddr.sin_zero),0,8);
fxaddr.sin_port = htons(port);
fxaddr.sin_family = AF_INET;
/* Resolve whether address in dotted decimal format
or not */
if( ( addr=inet_addr( system ) )!= INADDR_NONE )
{
/* Assign address to sockaddr_in structure
*/
fxaddr.sin_addr.s_addr = addr;
}
else
{
/* Assign address to hostent structure */
fxtent = gethostbyname( system );
if( fxtent == ( struct hostent* ) NULL)
{
Write_Error( errno);
return( FAILURE );
}
else
{
memcpy( &fxaddr.sin_addr,
fxtent->h_addr,
fxtent->h_length
);
}
}
/* Create socket */
if( sockfd = socket( AF_INET, SOCK_STREAM, 0 ) < 0)
{
Write_Error( errno );
Write_Log(" Socket not created");
return( FAILURE );
}
/* Make descriptors zero and set them */
FD_ZERO(&ready);
FD_SET(sockfd, &ready);
/* Set to non blocking mode*/
iBlock = 1;
ioctl(sockfd, FIONBIO, (char *) &iBlock);
/* Try to establish a connection with the server
*/
if(connect( sockfd, (struct sockaddr *) &fxaddr,
sizeof( fxaddr))< 0)
{
if (errno == EINPROGRESS)
{
timeout.tv_sec = 0;
timeout.tv_usec = otimeout;
iMax = sockfd + 1;
rc = select(iMax, NULL, &ready, NULL,
&timeout);
if (rc > 0)
{
iBlock = 0;
ioctl(sockfd, FIONBIO, (char *)
&iBlock);
}
if (rc == 0)
{
Write_Error( errno);
close(sockfd);
return( FAILURE );
}
if (rc < 0)
{
Write_Error( errno);
close(sockfd);
return( FAILURE );
}
}
else
{
Write_Error( errno );
Write_Log(" Connection not established");
close(sockfd);
return( FAILURE );
}
}
iBlock = 0;
ioctl(sockfd, FIONBIO, (char *) &iBlock);
/* If connection successful store sockfd in a
temporary data
area for future retrieval */
sprintf( tmpsockfd,"%d",sockfd);
QXXCHGDA( tmp_dtaname, 1, 4, tmpsockfd );
return( SUCCESS );
=====
__________________________________________________
Do You Yahoo!?
Bid and sell for free at http://auctions.yahoo.com
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.