summaryrefslogtreecommitdiff
path: root/src/interfaces/odbc/socket.c
diff options
context:
space:
mode:
authorByron Nikolaidis <byronn@insightdist.com>1998-06-03 20:33:45 +0000
committerByron Nikolaidis <byronn@insightdist.com>1998-06-03 20:33:45 +0000
commit99d21d5b62a54d64b95dc915a35fb35111bbc430 (patch)
tree06f02f33d40f78fd3b73ad6d775b18fd34ffd7e4 /src/interfaces/odbc/socket.c
parent85f91d0e8e2fa996a2c7ec629037387e1a9cfd88 (diff)
Update odbc driver to current version V.0244
Diffstat (limited to 'src/interfaces/odbc/socket.c')
-rw-r--r--src/interfaces/odbc/socket.c74
1 files changed, 42 insertions, 32 deletions
diff --git a/src/interfaces/odbc/socket.c b/src/interfaces/odbc/socket.c
index 40318ea5022..4d28f04b15c 100644
--- a/src/interfaces/odbc/socket.c
+++ b/src/interfaces/odbc/socket.c
@@ -1,16 +1,16 @@
-
-/* Module: socket.c
- *
- * Description: This module contains functions for low level socket
- * operations (connecting/reading/writing to the backend)
- *
- * Classes: SocketClass (Functions prefix: "SOCK_")
- *
- * API functions: none
- *
- * Comments: See "notice.txt" for copyright and license information.
- *
- */
+
+/* Module: socket.c
+ *
+ * Description: This module contains functions for low level socket
+ * operations (connecting/reading/writing to the backend)
+ *
+ * Classes: SocketClass (Functions prefix: "SOCK_")
+ *
+ * API functions: none
+ *
+ * Comments: See "notice.txt" for copyright and license information.
+ *
+ */
#include "socket.h"
@@ -45,8 +45,8 @@ SocketClass *rv;
return NULL;
rv->errormsg = NULL;
- rv->errornumber = 0;
-
+ rv->errornumber = 0;
+
rv->reverse = FALSE;
}
return rv;
@@ -77,6 +77,7 @@ SOCK_connect_to(SocketClass *self, unsigned short port, char *hostname)
{
struct hostent *host;
struct sockaddr_in sadr;
+unsigned long iaddr;
if (self->socket != -1) {
self->errornumber = SOCKET_ALREADY_CONNECTED;
@@ -84,15 +85,24 @@ struct sockaddr_in sadr;
return 0;
}
- host = gethostbyname(hostname);
- if (host == NULL) {
- self->errornumber = SOCKET_HOST_NOT_FOUND;
- self->errormsg = "Could not resolve hostname.";
- return 0;
+ memset((char *)&sadr, 0, sizeof(sadr));
+
+ /* If it is a valid IP address, use it.
+ Otherwise use hostname lookup.
+ */
+ iaddr = inet_addr(hostname);
+ if (iaddr == INADDR_NONE) {
+ host = gethostbyname(hostname);
+ if (host == NULL) {
+ self->errornumber = SOCKET_HOST_NOT_FOUND;
+ self->errormsg = "Could not resolve hostname.";
+ return 0;
+ }
+ memcpy(&(sadr.sin_addr), host->h_addr, host->h_length);
}
+ else
+ memcpy(&(sadr.sin_addr), (struct in_addr *) &iaddr, sizeof(iaddr));
- memset((char *)&sadr, 0, sizeof(sadr));
- memcpy(&(sadr.sin_addr), host->h_addr, host->h_length);
sadr.sin_family = AF_INET;
sadr.sin_port = htons(port);
@@ -185,15 +195,15 @@ char buf[4];
switch (len) {
case 2:
SOCK_get_n_char(self, buf, len);
- if (self->reverse)
- return *((unsigned short *) buf);
- else
+ if (self->reverse)
+ return *((unsigned short *) buf);
+ else
return ntohs( *((unsigned short *) buf) );
case 4:
- SOCK_get_n_char(self, buf, len);
- if (self->reverse)
- return *((unsigned int *) buf);
+ SOCK_get_n_char(self, buf, len);
+ if (self->reverse)
+ return *((unsigned int *) buf);
else
return ntohl( *((unsigned int *) buf) );
@@ -202,7 +212,7 @@ char buf[4];
self->errormsg = "Cannot read ints of that length";
return 0;
}
-}
+}
void
@@ -211,12 +221,12 @@ SOCK_put_int(SocketClass *self, int value, short len)
unsigned int rv;
switch (len) {
- case 2:
+ case 2:
rv = self->reverse ? value : htons( (unsigned short) value);
SOCK_put_n_char(self, (char *) &rv, 2);
return;
- case 4:
+ case 4:
rv = self->reverse ? value : htonl( (unsigned int) value);
SOCK_put_n_char(self, (char *) &rv, 4);
return;
@@ -251,7 +261,7 @@ SOCK_get_next_byte(SocketClass *self)
// reload the buffer
self->buffer_read_in = 0;
- self->buffer_filled_in = recv(self->socket, (char *)self->buffer_in, globals.socket_buffersize, 0);
+ self->buffer_filled_in = recv(self->socket, (char *)self->buffer_in, globals.socket_buffersize, 0);
mylog("read %d, global_socket_buffersize=%d\n", self->buffer_filled_in, globals.socket_buffersize);