X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fnet%2Fclientsocket.cpp;h=cbf18e593bdadc458ed862ab9aba326025df0bd1;hb=6f6845971a21c2d7e04b87925f5e657f0f20ca0d;hp=80303de7ea9a136aa61ce54337effb80e049d934;hpb=50e9f9ea7f7385a2c5931fca2b8fb1103078e67c;p=libs%2Fnet.git diff --git a/source/net/clientsocket.cpp b/source/net/clientsocket.cpp index 80303de..cbf18e5 100644 --- a/source/net/clientsocket.cpp +++ b/source/net/clientsocket.cpp @@ -1,4 +1,4 @@ -#ifdef WIN32 +#ifdef _WIN32 #include #else #include @@ -32,6 +32,32 @@ ClientSocket::~ClientSocket() delete peer_addr; } +void ClientSocket::shutdown(IO::Mode m) +{ + int how; + m = m&IO::M_RDWR; +#ifdef _WIN32 + if(m==IO::M_READ) + how = SD_RECEIVE; + else if(m==IO::M_WRITE) + how = SD_SEND; + else if(m==IO::M_RDWR) + how = SD_BOTH; +#else + if(m==IO::M_READ) + how = SHUT_RD; + else if(m==IO::M_WRITE) + how = SHUT_WR; + else if(m==IO::M_RDWR) + how = SHUT_RDWR; +#endif + else + return; + + ::shutdown(priv->handle, how); + mode = mode&~m; +} + const SockAddr &ClientSocket::get_peer_address() const { if(peer_addr==0) @@ -41,6 +67,7 @@ const SockAddr &ClientSocket::get_peer_address() const unsigned ClientSocket::do_write(const char *buf, unsigned size) { + check_access(IO::M_WRITE); if(!connected) throw bad_socket_state("not connected"); @@ -61,6 +88,7 @@ unsigned ClientSocket::do_write(const char *buf, unsigned size) unsigned ClientSocket::do_read(char *buf, unsigned size) { + check_access(IO::M_READ); if(!connected) throw bad_socket_state("not connected");