struct Socket_tag {
struct socket_function_table *fn;
/* the above variable absolutely *must* be the first in this structure */
- char *error;
+ const char *error;
int s;
Plug plug;
void *private_ptr;
typedef struct Socket_tag *Actual_Socket;
struct SockAddr_tag {
- char *error;
+ const char *error;
/*
* Which address family this address belongs to. AF_INET for
* IPv4; AF_INET6 for IPv6; AF_UNSPEC indicates that name
}
}
-char *error_string(int error)
+const char *error_string(int error)
{
return strerror(error);
}
static void sk_tcp_set_private_ptr(Socket s, void *ptr);
static void *sk_tcp_get_private_ptr(Socket s);
static void sk_tcp_set_frozen(Socket s, int is_frozen);
-static char *sk_tcp_socket_error(Socket s);
+static const char *sk_tcp_socket_error(Socket s);
static struct socket_function_table tcp_fn_table = {
sk_tcp_plug,
int err;
Actual_Socket ret;
short localport;
+ int fl;
/*
* Create Socket structure.
a.sin_addr.s_addr = htonl(addr->address);
a.sin_port = htons((short) port);
#endif
- {
- int i = 1;
- ioctl(s, FIONBIO, &i);
- }
+
+ fl = fcntl(s, F_GETFL);
+ if (fl != -1)
+ fcntl(s, F_SETFL, fl | O_NONBLOCK);
if ((
#ifdef IPV6
if (s->writable)
try_send(s);
+ /*
+ * Update the select() status to correctly reflect whether or
+ * not we should be selecting for write.
+ */
+ uxsel_tell(s);
+
return bufchain_size(&s->output_data);
}
if (s->writable)
try_send(s);
+ /*
+ * Update the select() status to correctly reflect whether or
+ * not we should be selecting for write.
+ */
+ uxsel_tell(s);
+
return s->sending_oob;
}
ret = recv(s->s, buf, sizeof(buf), MSG_OOB);
noise_ultralight(ret);
if (ret <= 0) {
- char *str = (ret == 0 ? "Internal networking trouble" :
- error_string(errno));
+ const char *str = (ret == 0 ? "Internal networking trouble" :
+ error_string(errno));
/* We're inside the Unix frontend here, so we know
* that the frontend handle is unnecessary. */
logevent(NULL, str);
* if there's a problem. These functions extract an error message,
* or return NULL if there's no problem.
*/
-char *sk_addr_error(SockAddr addr)
+const char *sk_addr_error(SockAddr addr)
{
return addr->error;
}
-static char *sk_tcp_socket_error(Socket sock)
+static const char *sk_tcp_socket_error(Socket sock)
{
Actual_Socket s = (Actual_Socket) sock;
return s->error;