mirror of
https://github.com/postgres/postgres.git
synced 2025-07-21 16:02:15 +03:00
Update odbc driver to current version V.0244
This commit is contained in:
@ -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));
|
||||
memcpy(&(sadr.sin_addr), host->h_addr, host->h_length);
|
||||
|
||||
/* 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));
|
||||
|
||||
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);
|
||||
|
||||
|
Reference in New Issue
Block a user