struct Socket_tag {
struct socket_function_table *fn;
/* other stuff... */
- char *error;
+ OSStatus error;
EndpointRef ep;
Plug plug;
void *private_ptr;
typedef struct Socket_tag *Actual_Socket;
struct SockAddr_tag {
- char *error;
+ OSStatus error;
DNSAddress address;
};
CloseOpenTransport();
}
-static char *error_string(int error)
-{
- return "An error...";
-}
-
SockAddr ot_namelookup(char *host, char **canonicalname)
{
SockAddr ret = smalloc(sizeof(struct SockAddr_tag));
+ ret->error = kOTNoError;
OTInitDNSAddress(&(ret->address), host);
/* for now we'll pretend canonicalname is always just host */
ret = smalloc(sizeof(struct Socket_tag));
ret->fn = &fn_table;
- ret->error = NULL;
+ ret->error = kOTNoError;
ret->plug = plug;
bufchain_init(&ret->output_data);
ret->writable = 1; /* to start with */
ret = smalloc(sizeof(struct Socket_tag));
ret->fn = &fn_table;
- ret->error = NULL;
+ ret->error = kOTNoError;
ret->plug = plug;
bufchain_init(&ret->output_data);
ret->connected = 0; /* to start with */
ret->ep = ep;
if (err) {
- ret->error = error_string(err);
+ ret->error = err;
return (Socket) ret;
}
err = OTBind(ep, NULL, NULL); /* OpenTransport always picks our address */
if (err) {
- ret->error = error_string(err);
+ ret->error = err;
return (Socket) ret;
}
err = OTConnect(ep, &connectCall, nil);
if (err) {
- ret->error = error_string(err);
+ ret->error = err;
return (Socket) ret;
} else {
ret->connected = 1;
*/
char *ot_addr_error(SockAddr addr)
{
- return addr->error;
+ static char buf[128];
+
+ if (addr->error == kOTNoError)
+ return NULL;
+ sprintf(buf, "error %d", addr->error);
+ return buf;
}
static char *ot_tcp_socket_error(Socket sock)
{
Actual_Socket s = (Actual_Socket) sock;
- return s->error;
+ static char buf[128];
+
+ if (s->error == kOTNoError)
+ return NULL;
+ sprintf(buf, "error %d", s->error);
+ return buf;
}
static void ot_tcp_set_frozen(Socket sock, int is_frozen)