X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Fwin32%2Fsilcwin32net.c;h=fd7542dd5fc9508aa8c6dcadf7b7fadc13623fd5;hb=a818c5b5411bbc4436d1c5f011236985c96bb787;hp=98b80a19bf3cfffe81f2d95a56c9bca1b1774a98;hpb=306ec7a94a1097ccd432c9dd022efe234605fa38;p=silc.git diff --git a/lib/silcutil/win32/silcwin32net.c b/lib/silcutil/win32/silcwin32net.c index 98b80a19..fd7542dd 100644 --- a/lib/silcutil/win32/silcwin32net.c +++ b/lib/silcutil/win32/silcwin32net.c @@ -19,6 +19,8 @@ */ /* $Id$ */ +/* XXX IPv6 support missing */ + #include "silcincludes.h" #include "silcnet.h" @@ -28,7 +30,7 @@ If argument `ip_addr' is NULL `any' address will be used. Returns the created socket or -1 on error. */ -int silc_net_create_server(int port, char *ip_addr) +int silc_net_create_server(int port, const char *ip_addr) { SOCKET sock; int rval; @@ -99,7 +101,8 @@ void silc_net_close_server(int sock) socket or -1 on error. This blocks the process while trying to create the connection. */ -int silc_net_create_connection(int port, char *host) +int silc_net_create_connection(const char *local_ip, int port, + const char *host) { SOCKET sock; int rval, err; @@ -111,7 +114,8 @@ int silc_net_create_connection(int port, char *host) /* Do host lookup */ dest = gethostbyname(host); if (!dest) { - SILC_LOG_ERROR(("Network (%s) unreachable", host)); + SILC_LOG_ERROR(("Network (%s) unreachable: could not resolve the " + "IP address", host)); return -1; } @@ -139,7 +143,9 @@ int silc_net_create_connection(int port, char *host) } /* Set appropriate options */ +#if defined(TCP_NODELAY) silc_net_set_socket_opt(sock, IPPROTO_TCP, TCP_NODELAY, 1); +#endif silc_net_set_socket_opt(sock, SOL_SOCKET, SO_KEEPALIVE, 1); SILC_LOG_DEBUG(("Connection created")); @@ -152,7 +158,8 @@ int silc_net_create_connection(int port, char *host) connection returns directly. To get the result of the connect() one must select() the socket and read the result after it's ready. */ -int silc_net_create_connection_async(int port, char *host) +int silc_net_create_connection_async(const char *local_ip, int port, + const char *host) { SOCKET sock; int rval, err; @@ -165,7 +172,8 @@ int silc_net_create_connection_async(int port, char *host) /* Do host lookup */ dest = gethostbyname(host); if (!dest) { - SILC_LOG_ERROR(("Network (%s) unreachable", host)); + SILC_LOG_ERROR(("Network (%s) unreachable: could not resolve the " + "IP address", host)); return -1; } @@ -196,7 +204,9 @@ int silc_net_create_connection_async(int port, char *host) silc_net_set_socket_nonblock(sock); /* Set appropriate options */ +#if defined(TCP_NODELAY) silc_net_set_socket_opt(sock, IPPROTO_TCP, TCP_NODELAY, 1); +#endif silc_net_set_socket_opt(sock, SOL_SOCKET, SO_KEEPALIVE, 1); SILC_LOG_DEBUG(("Connection created")); @@ -214,8 +224,7 @@ void silc_net_close_connection(int sock) /* Converts the IP number string from numbers-and-dots notation to binary form. */ -bool silc_net_addr2bin(const char *addr, unsigned char *bin, - uint32 bin_len) +bool silc_net_addr2bin(const char *addr, void *bin, SilcUInt32 bin_len) { unsigned long ret; @@ -224,8 +233,7 @@ bool silc_net_addr2bin(const char *addr, unsigned char *bin, if (bin_len < 4) return FALSE; - SILC_PUT32_LSB(ret, bin); - + memcpy(bin, (unsigned char *)&ret, 4); return ret != INADDR_NONE; }