aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/3rdparty/tekcos/tekcos.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/3rdparty/tekcos/tekcos.c')
-rw-r--r--src/libjin/3rdparty/tekcos/tekcos.c105
1 files changed, 56 insertions, 49 deletions
diff --git a/src/libjin/3rdparty/tekcos/tekcos.c b/src/libjin/3rdparty/tekcos/tekcos.c
index 9705fe2..a1fc94e 100644
--- a/src/libjin/3rdparty/tekcos/tekcos.c
+++ b/src/libjin/3rdparty/tekcos/tekcos.c
@@ -13,18 +13,18 @@ enum
{
TK_SUCCESS = 0,
- TK_INITFAILED, // init tekcos failed
+ TK_INITFAILED, // init tekcos failed
- TK_COULDNETCREATESOCKET, // couldn't create socket.
- TK_CONNECTFAILED, // connect to remote server failed.
- TK_BINDSOCKETFAILED, // couldn't bind socket to port
- TK_LISTENSOCKETFAILED, // couldn't listen to port
- TK_INVALIDSOCKET, // invalid socket
- TK_WRONGSOCKETTPYE, // wrong socket type
+ TK_COULDNETCREATESOCKET, // couldn't create socket.
+ TK_CONNECTFAILED, // connect to remote server failed.
+ TK_BINDSOCKETFAILED, // couldn't bind socket to port
+ TK_LISTENSOCKETFAILED, // couldn't listen to port
+ TK_INVALIDSOCKET, // invalid socket
+ TK_WRONGSOCKETTPYE, // wrong socket type
- TK_INVALIDTARGET, // cant sendto.
+ TK_INVALIDTARGET, // cant sendto.
- TK_UNKNOWN, // unknown
+ TK_UNKNOWN, // unknown
};
// error code
@@ -74,7 +74,6 @@ uint32 tk_strtohl(const char* str)
{
struct in_addr inaddr;
inet_pton(AF_INET, str, (void*)&inaddr);
- // host long
return ntohl(inaddr.s_addr);
}
@@ -105,11 +104,16 @@ tk_TCPsocket* tk_tcp_open(tk_IPaddress ip)
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_port = htons(ip.port);
- // 32bit address and 16bit port number.
addr.sin_family = AF_INET;
- if (ip.host != INADDR_NONE && (ip.host != INADDR_ANY))
- { // connet to an existed remote server.
+//ws2def.h
+//#define INADDR_ANY (ULONG)0x00000000
+//#define INADDR_LOOPBACK 0x7f000001
+//#define INADDR_BROADCAST (ULONG)0xffffffff
+//#define INADDR_NONE 0xffffffff
+
+ if (ip.host != INADDR_NONE && ip.host != INADDR_ANY)
+ {
addr.sin_addr.s_addr = htonl(ip.host);
if (connect(sk->id, (const struct sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR)
{
@@ -117,8 +121,9 @@ tk_TCPsocket* tk_tcp_open(tk_IPaddress ip)
goto error;
}
sk->type = SOCKET_TCLIENT;
- }else
- { // create a listenning server.
+ }
+ else
+ {
addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sk->id, (const struct sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR)
@@ -148,12 +153,12 @@ int tk_tcp_close(tk_TCPsocket* sk)
{
if (sk->id == INVALID_SOCKET)
goto error;
-#ifdef _WIN32
+ #ifdef _WIN32
closesocket(sk->id);
-#else
- close(sk->id);
-#endif
- free(sk);
+ #else
+ close(sk->id);
+ #endif
+ free(sk);
return 1;
}
error:
@@ -161,23 +166,23 @@ error:
return 0;
}
-int tk_tcp_send(tk_TCPsocket* client, const void* buffer, int bsize, int* sent)
+int tk_tcp_send(tk_TCPsocket* client, const void* buffer, int size, int* sent)
{
- // byte poiter.
const char *data = (const char*)buffer;
if (client->type != SOCKET_TCLIENT)
- {// only cliednt can send stuff.
+ {
state = TK_WRONGSOCKETTPYE;
goto error;
}
- //send(sk->id, buffer, bsize, 0);
- int left = bsize;
- if(sent) *sent = 0;
+ int left = size;
+ if(sent)
+ *sent = 0;
int len = 0;
do {
len = send(client->id, data, left, 0);
if (len > 0) {
- if(sent) *sent += len;
+ if(sent)
+ *sent += len;
left -= len;
data += len;
}
@@ -187,24 +192,26 @@ error:
return 0;
}
-int tk_tcp_recv(tk_TCPsocket* client, char* buffer, int bsize, int* len)
+int tk_tcp_recv(tk_TCPsocket* client, char* buffer, int size, int* len)
{
*len = 0;
if (client->type != SOCKET_TCLIENT)
- {// only client can be recieved
+ {
state = TK_WRONGSOCKETTPYE;
goto error;
}
+ int l = 0;
do
{
- *len = recv(client->id, buffer, bsize, 0);
- if (*len == SOCKET_ERROR)
+ l = recv(client->id, buffer, size - *len, 0);
+ if (l == SOCKET_ERROR)
{
state = TK_UNKNOWN;
goto error;
}
- } while (*len == 0 || errno == EINTR); // if was suspended, recieve again.
- buffer[*len] = '\0';
+ *len += l;
+ buffer += l;
+ } while (l == 0 || errno == EINTR);
return 1;
error:
return 0;
@@ -212,9 +219,10 @@ error:
tk_TCPsocket* tk_tcp_accept(tk_TCPsocket* server)
{
+ // client socket
tk_TCPsocket* csk = (tk_TCPsocket*) malloc(sizeof(tk_TCPsocket));
if (server->type != SOCKET_TSERVER)
- {// only server can accept connection
+ {
state = TK_WRONGSOCKETTPYE;
goto error;
}
@@ -240,38 +248,38 @@ error:
int tk_tcp_nonblocking(tk_TCPsocket* sk)
{
-#if defined(__BEOS__) && defined(SO_NONBLOCK)
+ #if defined(__BEOS__) && defined(SO_NONBLOCK)
{
long b = 1;
setsockopt(sk->id, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
}
-#elif defined(WIN32)
+ #elif defined(WIN32)
{
unsigned long mode = 1;
ioctlsocket(sk->id, FIONBIO, &mode);
}
-#elif defined(__OS2__)
+ #elif defined(__OS2__)
{
int dontblock = 1;
ioctl(sk->id, FIONBIO, &dontblock);
}
-#endif
+ #endif
return 1;
}
int tk_tcp_blocking(tk_TCPsocket* sk)
{
-#if defined(__BEOS__) && defined(SO_NONBLOCK)
+ #if defined(__BEOS__) && defined(SO_NONBLOCK)
{
long b = 0;
setsockopt(sk->id, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
}
-#elif defined(WIN32)
+ #elif defined(WIN32)
{
unsigned long mode = 0;
ioctlsocket(sk->id, FIONBIO, &mode);
}
-#elif defined(__OS2__)
+ #elif defined(__OS2__)
{
int dontblock = 0;
ioctl(sk->id, FIONBIO, &dontblock);
@@ -307,11 +315,11 @@ tk_UDPsocket* tk_udp_open(uint16 portnumber)
goto error;
}
if (portnumber <= 0)
- {// client, just return
+ {
return sk;
}
else
- {// server, need to bind address to socket
+ {
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr = htonl(INADDR_ANY);
@@ -357,7 +365,6 @@ int tk_udp_recvfrom(tk_UDPsocket* sk, tk_UDPpack* pack)
return 0;
}
pack->len = n;
- pack->data[n] = '\0';
return 1;
}
@@ -367,11 +374,11 @@ int tk_udp_close(tk_UDPsocket* sk)
{
if (sk->id != INVALID_SOCKET)
{
-#ifdef _WIN32
+ #ifdef _WIN32
closesocket(sk->id);
-#else
- close(sk->id);
-#endif
+ #else
+ close(sk->id);
+ #endif
}
free(sk);
}
@@ -383,4 +390,4 @@ int tk_freepack(tk_UDPpack* pack)
free(pack->data);
free(pack);
return 1;
-}
+} \ No newline at end of file