00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifdef WIN32
00022 #define WIN32_LEAN_AND_MEAN
00023 #include <windows.h>
00024 #include <winsock2.h>
00025 #else
00026 #include <errno.h>
00027 #endif
00028 #include <common/Logger.h>
00029 #include <net/NetServerTCP3Coms.h>
00030
00031 int NetServerTCP3Coms::SDLNet_TCP_Recv_Wrapper(TCPsocket sock, void *data, int maxlen)
00032 {
00033 #ifdef WIN32
00034 WSASetLastError(0);
00035 #else
00036 errno = 0;
00037 #endif
00038
00039 int result = SDLNet_TCP_Recv(sock, data, maxlen);
00040 if (result <= 0)
00041 {
00042 #ifdef WIN32
00043 int wsacp = WSAGetLastError();
00044 if (wsacp != WSAECONNRESET)
00045 {
00046 Logger::log(S3D::formatStringBuffer(
00047 "SDLNet_TCP_Recv_Wrapper: WSA Error code %i", wsacp));
00048 }
00049 #else
00050 int errnocp = errno;
00051 if (errnocp != ECONNRESET)
00052 {
00053 Logger::log(S3D::formatStringBuffer(
00054 "SDLNet_TCP_Recv_Wrapper: Error code %i", errnocp));
00055 }
00056 #endif
00057 }
00058
00059 return result;
00060 }
00061
00062 int NetServerTCP3Coms::SDLNet_TCP_Send_Wrapper(TCPsocket sock, void *datap, int len)
00063 {
00064 #ifdef WIN32
00065 WSASetLastError(0);
00066 #else
00067 errno = 0;
00068 #endif
00069
00070 int result = SDLNet_TCP_Send(sock, datap, len);
00071 if (result <= 0)
00072 {
00073 #ifdef WIN32
00074 int wsacp = WSAGetLastError();
00075 if (wsacp != WSAECONNRESET)
00076 {
00077 Logger::log(S3D::formatStringBuffer(
00078 "SDLNet_TCP_Send_Wrapper: WSA Error code %i", wsacp));
00079 }
00080 #else
00081 int errnocp = errno;
00082 if (errnocp != ECONNRESET)
00083 {
00084 Logger::log(S3D::formatStringBuffer(
00085 "SDLNet_TCP_Send_Wrapper: Error code %i", errnocp));
00086 }
00087 #endif
00088 }
00089
00090 return result;
00091 }
00092
00093 bool NetServerTCP3Coms::SDLNet_TCP_Recv_Full(TCPsocket socket, char *dest, int len)
00094 {
00095 int result = 0;
00096 while (len > 0)
00097 {
00098 int recv = SDLNet_TCP_Recv_Wrapper(socket, &dest[result], len);
00099 if (recv <= 0)
00100 {
00101 return false;
00102 }
00103
00104 result += recv;
00105 len -= recv;
00106
00107 if (len > 0) SDL_Delay(10);
00108 }
00109
00110 return true;
00111 }