20
20
the file descriptior.
37
namespace drizzle_protocol
41
26
* Helper to fill most of the Vio* with defaults.
44
static void drizzleclient_vio_init(Vio* vio, enum enum_vio_type type,
45
int sd, uint32_t flags)
29
static void vio_init(Vio* vio, enum enum_vio_type type,
30
my_socket sd, uint32_t flags)
32
#ifndef HAVE_VIO_READ_BUFF
33
flags&= ~VIO_BUFFERED_READ;
47
35
memset(vio, 0, sizeof(*vio));
50
38
if ((flags & VIO_BUFFERED_READ) &&
51
!(vio->read_buffer= (char*)malloc(VIO_READ_BUFFER_SIZE)))
39
!(vio->read_buffer= (char*)my_malloc(VIO_READ_BUFFER_SIZE, MYF(MY_WME))))
52
40
flags&= ~VIO_BUFFERED_READ;
54
vio->viodelete =drizzleclient_vio_delete;
55
vio->vioerrno =drizzleclient_vio_errno;
56
vio->read= (flags & VIO_BUFFERED_READ) ? drizzleclient_vio_read_buff : drizzleclient_vio_read;
57
vio->write =drizzleclient_vio_write;
58
vio->fastsend =drizzleclient_vio_fastsend;
59
vio->viokeepalive =drizzleclient_vio_keepalive;
60
vio->should_retry =drizzleclient_vio_should_retry;
61
vio->was_interrupted=drizzleclient_vio_was_interrupted;
62
vio->vioclose =drizzleclient_vio_close;
63
vio->peer_addr =drizzleclient_vio_peer_addr;
64
vio->vioblocking =drizzleclient_vio_blocking;
65
vio->is_blocking =drizzleclient_vio_is_blocking;
66
vio->timeout =drizzleclient_vio_timeout;
42
vio->viodelete =vio_delete;
43
vio->vioerrno =vio_errno;
44
vio->read= (flags & VIO_BUFFERED_READ) ? vio_read_buff : vio_read;
45
vio->write =vio_write;
46
vio->fastsend =vio_fastsend;
47
vio->viokeepalive =vio_keepalive;
48
vio->should_retry =vio_should_retry;
49
vio->was_interrupted=vio_was_interrupted;
50
vio->vioclose =vio_close;
51
vio->peer_addr =vio_peer_addr;
52
vio->vioblocking =vio_blocking;
53
vio->is_blocking =vio_is_blocking;
54
vio->timeout =vio_timeout;
71
59
/* Reset initialized VIO to use with another transport type */
73
void drizzleclient_vio_reset(Vio* vio, enum enum_vio_type type,
74
int sd, uint32_t flags)
61
void vio_reset(Vio* vio, enum enum_vio_type type,
62
my_socket sd, uint flags)
76
free(vio->read_buffer);
77
drizzleclient_vio_init(vio, type, sd, flags);
64
my_free(vio->read_buffer, MYF(MY_ALLOW_ZERO_PTR));
65
vio_init(vio, type, sd, flags);
81
69
/* Open the socket or TCP/IP connection and read the fnctl() status */
83
Vio *drizzleclient_vio_new(int sd, enum enum_vio_type type, uint32_t flags)
71
Vio *vio_new(my_socket sd, enum enum_vio_type type, uint flags)
85
Vio *vio = (Vio*) malloc(sizeof(Vio));
75
if ((vio = (Vio*) my_malloc(sizeof(*vio),MYF(MY_WME))))
89
drizzleclient_vio_init(vio, type, sd, flags);
77
vio_init(vio, type, sd, flags);
90
78
sprintf(vio->desc, "TCP/IP (%d)", vio->sd);
92
80
We call fcntl() to set the flags and then immediately read them back