julienxx
/EasyNet
/amendments
/3
synchronous call failing
julienxx made amendment 3 about 18 hours ago
--- HelloWorld.c Sun Oct 25 14:52:15 2026
+++ HelloWorld.c Sun Oct 25 15:19:05 2026
@@ -7,39 +7,107 @@
*/
#include <stdio.h>
+#include <string.h>
#include <OpenTransport.h>
#include <OpenTptInternet.h>
+#define kHost "typed-hole.org"
+#define kPort 79
+#define kQuery "textfile\015\012" /* textfile + CRLF */
+
int main(void)
{
OSStatus err;
- InetSvcRef inetServices;
+ InetSvcRef inetServices = NULL;
InetHostInfo hostInfo;
- char addrString[16];
+ EndpointRef ep = kOTInvalidEndpointRef;
+ InetAddress addr;
+ TCall sndCall;
+ OTResult result;
+ OTResult event;
+ OTFlags flags;
+ char buf[512];
err = InitOpenTransport();
if(err != noErr){
- printf("InitOpenTransport failed %ld\n", err);
+ printf("InitOpenTransport failed: %ld\n", err);
return 1;
}
inetServices = OTOpenInternetServices(kDefaultInternetServicesPath, 0, &err);
if(err != noErr){
- printf("OTOpenInternetServices failed %ld\n", err);
- CloseOpenTransport();
- return 1;
+ printf("OTOpenInternetServices failed: %ld\n", err);
+ goto done;
}
err = OTInetStringToAddress(inetServices, "example.com", &hostInfo);
if(err != noErr){
printf("DNS lookup failed: %ld\n", err);
+ goto done;
+ }
+
+ /* create TCP endpoint */
+ ep = OTOpenEndpoint(OTCreateConfiguration(kTCPName), 0, NULL, &err);
+ if(err != noErr){
+ printf("OTOpenEndpoint failed: %ld\n", err);
+ goto done;
+ }
+ OTSetSynchronous(ep);
+ OTSetBlocking(ep);
+
+ /* bind to local addr */
+ err = OTBind(ep, NULL, NULL);
+ if(err != noErr){
+ printf("OTBind failed: %ld\n", err);
+ goto done;
+ }
+
+ /* connect server */
+ OTInitInetAddress(&addr, kPort, hostInfo.addrs[0]);
+ OTMemzero(&sndCall, sizeof(TCall));
+ sndCall.addr.buf = (UInt8 *) &addr;
+ sndCall.addr.len = sizeof(InetAddress);
+
+ err = OTConnect(ep, &sndCall, NULL);
+ if(err != noErr){
+ printf("OTConnect failed: %ld\n", err);
+ goto done;
+ }
+
+ /* send query */
+ result = OTSnd(ep, kQuery, strlen(kQuery), 0);
+ if(result < 0){
+ printf("OTSend failed: %ld\n", err);
+ goto done;
+ }
+
+ /* read until conn closed */
+ for(;;){
+ result = OTRcv(ep, buf, sizeof(buf) - 1, &flags);
+ if(result < 0)
+ break;
+ buf[result] = '\0';
+ printf("%s", buf);
+ }
+
+ /* handle disconnect */
+ if(result == kOTLookErr){
+ event = OTLook(ep);
+ if(event == T_ORDREL){
+ OTRcvOrderlyDisconnect(ep);
+ OTSndOrderlyDisconnect(ep);
+ } else if(event == T_DISCONNECT) {
+ OTRcvDisconnect(ep, NULL);
+ }
} else {
- OTInetHostToString(hostInfo.addrs[0], addrString);
- printf("%s is %s\n", hostInfo.name, addrString);
+ printf("OTRcv failed: %ld\n", result);
}
- OTCloseProvider(inetServices);
+done:
+ if(ep != kOTInvalidEndpointRef)
+ OTCloseProvider(ep);
+ if(inetServices != NULL)
+ OTCloseProvider(inetServices);
CloseOpenTransport();
-
return 0;
}
\ No newline at end of file