× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Hi Charlie,

You pointed out that the application is hanging on GetReply(). Did you troubleshoot the GetReply() routine?

What does GetReply() do? Is that something you wrote?

If the GetReply() is the same one that was in the CLIENT1 sample program (the one from the article you linked to) it was specifically written to retrieve an SMTP response line. Since your application doesn't use SMTP, I don't know why'd leave that part of the code unchanged! So, I hope you changed it to suit your app?


On 2/11/2011 3:37 PM, Versfelt, Charles wrote:

I'm trying to do socket programming for the first time, the client has sent a server which has been set up by operations, I need to access via socket program to call their APIs.

I'm trying to follow the instructions from this article
http://systeminetwork.com/article/introduction-tcpip-programming
And also referring to sample programs.

And using the /copy socket_h

My program is hanging up on the Reply. It sits there and hangs.

Ops has set up the new server in WRKSRVTBLE as:
Service Port Protocol
E0007825019-1 1200 tcp

The IP address of the new server is in the Host Table entries as E0007825019-01.

Getting the IP address works.

p_hostent = gethostbyname('E0007825019-01');
if (p_hostent = *NULL);
@preturn = 'CPCON01';
@prtnmsg = 'Host lookup failed. ';
joblog('Host lookup failed.');
return;
else;
addr = h_addr;
endif;


Getting the port works.

p_servent = getservbyname('E0007825019-1': 'tcp');
if (p_servent<> *NULL);
port = s_port;
else;
port = 1200;
endif;

Creating the socket works

s = socket(AF_INET: SOCK_STREAM: IPPROTO_TCP);
If (s = -1);
@preturn = 'CPCON02';
@prtnmsg = 'Socket failed. ';
joblog('Socket failed!');
return;
endif;

I connect to the server

connto = *ALLx'00';
connto.sin_family = AF_INET;
connto.sin_addr = addr;
connto.sin_port = port;


if ( connect(s: %addr(connto): %size(connto)) = -1 );
callp close(s);
@preturn = 'CPCON03';
@prtnmsg = 'Connect failed. ';
joblog('Connect failed!');
return;
endif;

Just to check the value, at one point I put this value into a variable:
connect(s: %addr(connto): %size(connto)
The value is 0.
It's certainly not -1, the error.

The program sits and hangs on the if statement:

if ( GetReply(s)<> 220 );
@preturn = 'CPCON04';
@prtnmsg = 'Server Not Ready ';
callp close(s);
joblog('Not ready for SMTP requests.');
return;
endif;

Any help I get will be greatly appriciated... If I need to provide more information please let me know.
I don't see anything in the job log pointing me to what's happening.

ALSO, by the way... Not sure if this has anything to do with my problem...
Is it unusual that, I connect using these commands,
Then the first thing the vendor wants me to do in their specs is to send them a CONNECT command?

Or is what they're requesting somehow supposed to be part of my connect?

They want me to connect by sending them a string like this:
'0000000022CONNECT|CLIENTTYPE|20|CLIENTID|222|'

I took that to mean, that once I'm connected (after my if statement) the next thing I do is this:

SendAscii(s: '0000000022CONNECT|CLIENTTYPE|20|CLIENTID|222|');

Does it make sense that I connect (to the server via socket) and then send them their bar-delimited connect command? It's like I'm connecting to connect...

Charlie













As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 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.