1 // Copyright 2010, Shuo Chen. All rights reserved. 2 // http://code.google.com/p/muduo/ 3 // 4 // Use of this source code is governed by a BSD-style license 5 // that can be found in the License file. 6 7 // Author: Shuo Chen (chenshuo at chenshuo dot com) 8 9 #include "Socket.h" 10 11 #include "InetAddress.h" 12 #include "SocketsOps.h" 13 14 #include <netinet/in.h> 15 #include <netinet/tcp.h> 16 #include <strings.h> // bzero 17 18 using namespace muduo; 19 20 Socket::~Socket() 21 { 22 sockets::close(sockfd_); 23 } 24 25 void Socket::bindAddress(const InetAddress& addr) 26 { 27 sockets::bindOrDie(sockfd_, addr.getSockAddrInet()); 28 } 29 30 void Socket::listen() 31 { 32 sockets::listenOrDie(sockfd_); 33 } 34 35 int Socket::accept(InetAddress* peeraddr) 36 { 37 struct sockaddr_in addr; 38 bzero(&addr, sizeof addr); 39 int connfd = sockets::accept(sockfd_, &addr); 40 if (connfd >= 0) 41 { 42 peeraddr->setSockAddrInet(addr); 43 } 44 return connfd; 45 } 46 47 void Socket::setReuseAddr(bool on) 48 { 49 int optval = on ? 1 : 0; 50 ::setsockopt(sockfd_, SOL_SOCKET, SO_REUSEADDR, 51 &optval, sizeof optval); 52 // FIXME CHECK 53 } 54 55+void Socket::shutdownWrite() 56+{ 57+ sockets::shutdownWrite(sockfd_); 58+} 59+ 60