#if defined(__WIN32__)
#define WIN32_LEAN_AND_MEAN
+#define String _String
#include <winsock.h>
+#undef String
static WSADATA wsaData;
#elif defined(__unix__) || defined(__APPLE__)
};
static class SocketConnectThread : Thread
-{
+{
Socket socket;
-
+
uint Main()
{
bool result = false;
{
network.mutex.Wait();
strcpy(socket.inetAddress, inet_ntoa(socket.a.sin_addr));
- socket.inetPort = ntohs(socket.a.sin_port);
+ socket.inetPort = ntohs(socket.a.sin_port);
network.mutex.Release();
- if(socket.OnEstablishConnection(socket.s))
+ if(socket.OnEstablishConnection((int)socket.s))
{
network.mutex.Wait();
result = true;
SOCKET s;
SOCKADDR_IN a;
int addrLen = sizeof(a);
-
+
value.accepted = true;
s = accept(value.s,(SOCKADDR *)&a, &addrLen);
if(s != -1)
address = null;
this.a = a;
strcpy(inetAddress, inet_ntoa(this.a.sin_addr));
- inetPort = ntohs(a.sin_port);
+ inetPort = ntohs(a.sin_port);
this.s = s;
service = value;
connectThread = null;
network.mutex.Wait();
FD_SET(s, &network.exceptSet);
FD_SET(s, &network.readSet);
- if(s >= network.ns)
+ if(s >= network.ns)
{
- network.ns = s+1;
+ network.ns = (int)(s+1);
network.socketsSemaphore.Release();
}
network.mutex.Release();
OnReceivePacket(packet);
delete tempBuffer;
return 0;
- }
+ }
}
return 0;
}
if(s == network.ns - 1)
Network_DetermineMaxSocket();
-
+
if(s != -1)
{
FD_CLR(s, &network.readSet);
fd_set ws, es;
if(s != -1 && ((type == tcp && (count = SendData(buffer, size, 0))) ||
- (type == udp && (count = sendto(s, buffer, size,0, (SOCKADDR *)&a, sizeof(a))))))
+ (type == udp && (count = (int)sendto(s, buffer, size,0, (SOCKADDR *)&a, sizeof(a))))))
{
#if defined(__WIN32__)
int error = WSAGetLastError();
#endif
{
//Print("~");
- }
+ }
// This is what was making eCom jam...
// select(s+1, null, &ws, &es, null);
bool SendString(char * string)
{
- return Send(string, strlen(string));
+ return Send(string, (int)strlen(string));
}
bool Sendf(char * format, ...)
bool result;
va_list args;
char string[MAX_F_STRING];
- string[sizeof(string)-1] = 0;
va_start(args, format);
vsnprintf(string, sizeof(string), format, args);
- result = Send(string, strlen(string));
+ string[sizeof(string)-1] = 0;
+ result = Send(string, (int)strlen(string));
va_end(args);
return result;
}
bool DatagramHost(int port)
{
SOCKET s = socket(AF_INET,SOCK_DGRAM,0);
- if(s != -1)
+ if(s != -1 && !_connected)
{
SOCKADDR_IN a;
bool val = true;
FD_CLR(s, &network.writeSet);
FD_SET(s, &network.readSet);
FD_SET(s, &network.exceptSet);
- if(s >= network.ns)
+ if(s >= network.ns)
{
- network.ns = s+1;
+ network.ns = (int)(s+1);
network.socketsSemaphore.Release();
}
network.mutex.Release();
service = null;
_connected = 0;
}
-
+
if(s != -1) { closesocket(s); this.s = -1; }
delete address;
- delete recvBuffer;
+ delete recvBuffer;
recvBufferSize = 0;
recvBytes = 0;
- if(s != -1)
+ if(s != -1)
{
FD_CLR(s, &network.readSet);
FD_CLR(s, &network.writeSet);
_connected = -2;
FD_SET(s, &network.writeSet);
- if(s >= network.ns && !processAlone)
+ if(s >= network.ns && !processAlone)
{
- network.ns = s+1;
+ network.ns = (int)(s+1);
network.socketsSemaphore.Release();
}
connectThread = SocketConnectThread { socket = this };
if(_connected == -1 || destroyed)
{
_connected = 0;
-
+
if(s == network.ns - 1)
Network_DetermineMaxSocket();
#if 0
}
else
this.s = -1;
-
+
delete connectThread;
}
else
int count = 0;
result = true;
- if(recvBufferSize - recvBytes < MAX_RECEIVE)
+ if((int)recvBufferSize - recvBytes < MAX_RECEIVE)
{
recvBuffer = renew recvBuffer byte[recvBufferSize + MAX_RECEIVE];
recvBufferSize += MAX_RECEIVE;
}
-
+
if(FD_ISSET(s, rs) && disconnectCode == (DisconnectCode)-1)
{
if(type == tcp /*|| _connected*/)
else
{
int len = sizeof(a);
- count = recvfrom(s, recvBuffer + recvBytes,
+ count = (int)recvfrom(s, recvBuffer + recvBytes,
recvBufferSize - recvBytes, 0, (SOCKADDR *)&a, &len);
strcpy(inetAddress, inet_ntoa(this.a.sin_addr));
inetPort = ntohs((uint16)a.sin_port);
public bool Process()
{
- ProcessTimeOut(0);
+ return ProcessTimeOut(0);
}
public bool ProcessTimeOut(Seconds timeOut)
fd_set rs, ws, es;
int selectResult;
- if(disconnectCode > 0) return false;
+ if(disconnectCode > 0 && !leftOver) return false;
FD_ZERO(&rs);
FD_ZERO(&ws);
FD_ZERO(&es);
//FD_SET(s, &ws);
FD_SET(s, &es);
- selectResult = select(s+1, &rs, &ws, &es, leftOver ? &tv : (timeOut ? &tvTO : null));
+ incref this;
+ selectResult = select((int)(s+1), &rs, &ws, &es, leftOver ? &tv : (timeOut ? &tvTO : null));
mutex.Wait();
if(s != -1 && _refCount && (leftOver || selectResult))
{
gotEvent |= ProcessSocket(&rs, &ws, &es);
}
mutex.Release();
+ delete this;
return gotEvent;
}