From c142424571a3744e8b68ec9746eaa05505c03af5 Mon Sep 17 00:00:00 2001 From: faketruth Date: Tue, 31 Jan 2012 00:38:18 +0000 Subject: Can now receive POST data in WebPlugins! Fixed Debug With optimized Noise in VS2010 by having it run the correct MCServer_debug.exe instead of MCServer.exe Changed winsock.h to Winsock2.h in Globals.h so sockets can be graciously closed (See webserver Socket::Close() ) git-svn-id: http://mc-server.googlecode.com/svn/trunk@197 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- WebServer/Socket.cpp | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'WebServer/Socket.cpp') diff --git a/WebServer/Socket.cpp b/WebServer/Socket.cpp index ec3c9a5c7..e2a5179f3 100644 --- a/WebServer/Socket.cpp +++ b/WebServer/Socket.cpp @@ -118,11 +118,20 @@ Socket& Socket::operator=(Socket& o) { return *this; } -void Socket::Close() { +void Socket::Close( bool a_WaitSend /* = false */ ) +{ if( s_ ) { - closesocket(s_); - s_ = 0; + if( a_WaitSend ) + { + assert( shutdown(s_, SD_SEND ) == 0 ); + char c; + while( recv(s_, &c, 1, 0 ) != 0 ) + {} + } + + closesocket(s_); + s_ = 0; } } @@ -135,12 +144,25 @@ std::string Socket::ReceiveLine() { { return ""; } - ret += r; if (r == '\n') return ret; } } +std::string Socket::ReceiveBytes( unsigned int a_Length ) { + std::string ret; + while( ret.size() < a_Length ) { + char r; + + if (recv(s_, &r, 1, 0) <= 0 ) + { + return ""; + } + ret += r; + } + return ret; +} + void Socket::SendLine(std::string s) { s += '\n'; if( send(s_,s.c_str(),s.length(),MSG_NOSIGNAL) <= 0 ) -- cgit v1.2.3